MySQL 索引

聚簇索引和非聚簇索引:

图片来源:http://blog.csdn.net/voidccc/article/details/40077329

     聚簇索引:

     按照每张表的主键构造一颗B+树,叶子节点存放的就是行记录的所有数据,也将聚簇索引的叶子节点成为数据页。页与页之间通过双向链表链接,页按照主键的顺序排序。每张表只能有一个聚簇索引。

       对于主键的排序查询和范围查询非常快,叶子节点上的数据就是用户要查找的数据。

  辅助索引:

  要索引数据和行数据所对应的主键地址。若通过辅助索引查询数据的时候,InnoDB存储引擎会遍历辅助索引并通过叶子节点的主键地址找到一个完整的行记录。

  对一些统计查询,可以直接通过辅助索引来计算减少IO操作。

 联合索引:辅助索引是对单个列进行索引,而联合索引是对表上的多个列进行索引。

  查询的时候,可以两个条件一起所索引,可以只有父和子条件一起,也可以单独父条件,但是不能单独子条件,因为子条件的索引是关联到父索引中的。

  联合索引对索引列中的数据 都做了排序处理,所以可以更快查询数据。比如基于某一类的商品的价格排序,就可以使用多列索引。这样在第二列排序的时候,就不用使用filesor额外排序了。

覆盖索引:从辅助索引中就可以查得到的记录,而不用通过辅助索引回查到聚簇索引中的记录。

       好处是不包含整行记录的所有信息,大小要远小于聚簇索引,可以减少大量的IO操作。

 通过 Explain 分析低效SQL

 

type:

all       全表扫描

index     索引全扫描

range     索引范围扫描

ref       使用非唯一索引

eq_ref    唯一索引

const/system 表单中最多有一个匹配查询起来非常迅速

null    不用访问表或者索引 就可以直接得到结果

show profile 分析SQL

set profiling=1; #默认profiling 是关闭的 这里开启session 级别profiling
select @@profiling; #查看设置结果

原文地址:https://www.cnblogs.com/alin-qu/p/8093934.html