MySQL Innodb存储引擎:索引

版权声明:本文为博主原创文章,转载请注明作者与出处,http://blog.csdn.net/lixingtao0520 https://blog.csdn.net/lixingtao0520/article/details/83856466

1,Innodb存储引擎索引的使用的B+树索引本身并不能找到具体的一条记录,能找到只是该记录所在的页。然后数据库通过把页读入到内存,再在内存中进行查找,最后得到要查找的数据。

B+树的叶子节点是数据页。页中有多条记录。

2、B+树特点:所有记录节点都是按键值的大小顺序存放在同一层的叶子节点,由各叶子节点指针进行连接。

3、B+树索引分为聚集索引和辅助索引,两者不同的是,叶子节点存放的是否是真实信息数据。

    聚集索引就是按照每张表的主键构造成一棵B+树,同时叶子节点中存放的即为整张表的行记录数据,聚集索引的叶子节点也称为数据页。这就是为什么一张表只能有一个聚集索引。数据页之间用双向链表连接。聚集索引在并不是物理存储连续的。

    辅助索引(非聚集索引)叶子节点并不包含行记录的全部数据。叶子节点除了包含键值以外,还包含对应行数据的聚集索引键。当通过辅助索引来查找数据时,存储引擎会遍历辅助索引并通过叶子指针获得指向聚集索引的主键值,通过主键索引来找到一个完整的行信息。因为多个辅助索引不会影响数据在聚集索引上的组织,每张表上可以有多个辅助索引。

4、什么情况下添加索引?对于某个字段取值范围比较大,选择性大时,加索引有意义。

5、其他几种索引类型

    联合索引:表上多个列进行索引。联合索引也是一颗B+树,不一样的是联合索引的键值的数量大于1.

对于联合索引(a,b),where a =xxx and b =xxx,和where a=xxx 可以使用此联合索引,但是对于where b = xxx不能使用,因为b列数据在此联合索引上不是有序的。

    覆盖索引:即可以从辅助索引中查到记录,则没有必要再查找聚集索引中的记录。好处是辅助索引远小于聚集索引的大小,查找较快。

6、优化器选择不使用索引的情况:如果要访问的数据量蛮大时(大于20%),如果某列即时有辅助索引,也不会使用,而是直接使用聚集索引(即全表扫描),因为顺序读远大于离散读。

参考:

姜承尧《MySQL技术内幕:InnoDB存储引擎》

猜你喜欢

转载自blog.csdn.net/lixingtao0520/article/details/83856466