一、引擎简介

mysql的innodb引擎索引数据是一起存放,一张表是按主键顺序存放的索引组织表,如果没有主键,会有个rowid,按rowid顺序存放的。

mysql的myisam引擎索引和数据是分开存放的,索引里面存的是数据地址的指针。

二、innodb引擎下的索引

1.索引类型

索引默认使用的b+树,也有hash索引,hash索引适合场景等值查找比较快,所以B+树使用的比较多,大家简单了解下,b+树是多叉平衡树,叶子节点存具体的数据,叶子节点又组成了一个链表,非叶子节点存索引。不过注意下,主键索引叶子节点存整条数据,非主键索引叶子节点存的是主键的值。

2.什么叫覆盖索引?

就是索引里面包含了主键,、

而索引里面的主键的好处是什么呢?

如果联合索引不包含主键,通过前面的简单了解,我们知道数据在主键索引上,我们首先遍历联合索引树,拿到主键值,再根据主键值去主键索引树拿具体的数据,这个过程叫做回表。

如果联合索引的包含主键,就不需要这个回表过程,效率不就杠杠的了吗

3.什么叫最左匹配原则

譬如索引是(a,b,c)

1)select * from t where a = 1 and b =2 and c =3 能用上这个索引。注意:与where条件的a的顺序无关,只要where条件里面有个a这个条件

2)select * from t where b =2 就不会用索引

这就是最左匹配原则

例:表总共行数是12

这里有个问题就是第二条语句为什么用不上这个索引呢?

因为是b+树是有序的啊,它是按索引的里面第一个值排序,当一个值相同时,按照第二个值排序,依次类推,第一条语句查找进行a的比较,a相同在b的比较,依次类推。

所以索引的选择是很重要,根据具体的业务场景来选择,注意:索引过多又要占用磁盘,因为索引和数据最终都要存在磁盘上,增删改又要维护这颗索引树来保证有序性,

 

 

 

posted on 2020-05-14 23:08  柳无情  阅读(185)  评论(0编辑  收藏  举报