1、B+Tree 索引
索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。
为什么要使用索引?
(1)索引可以极大的减少存储引擎需要扫描大数据量;
(2)索引可以把随机IO转变为顺序IO;
(3)索引在分组、排序等操作时,避免使用临时表
2、二叉树查找树(Binary Search Tree)
缺点:
(1)数据的深度决定着IO次数,深度太深IO耗时大。
(2)每一个磁盘块(节点/页)保存的数据量太小,
没有很好的利用操作磁盘IO的数据交换特性,也没有利用好磁盘IO的预读写能力(空间局部性原理),从而带来频繁的IO操作。
3、多路平衡二叉树(B-Tree)
节点数量n,路数n+1
相比二叉平衡树:
减少了数的深度,磁盘块可以存储更多信息;但是还是没有很好的利用磁盘的IO特性。
4、加强版多路平衡二叉树(B+Tree)
B+Tree 与B-Tree的区别
(1)B+Tree节点关键词搜索采用了左闭合区间
(2)B+Tree非叶子节点不保存数据相关信息,只保存关键字和子节点的引用
(3)B+Tree关键字对应的数据保存在叶子结点;
(4)B+Tree叶子节点是顺序排列的,并且相邻节点具有顺序引用的关系。
为什么选择B+Tree?
(1)B+Tree是B-Tree的变种,拥有B-Tree的优势;
(2)B+Tree树扫库、扫表能力更强;
(3)B+Tree的磁盘读写能力更强;
(4)B+Tree的排序能力更强;
(5)B+Tree的查询更加稳定,因为层次数量相同,可以查询效率可以预期。
5、B+Tree早存储引擎中的体现
(1)Myisam
Myisam存储引擎中,索引(.MYI)和数据(MYD)是分开存储的,多个索引之间的关系
(2)InnoDB
索引和数据是存储在一个文件中的,只有叶子节点存储有数据。InnoDB采用的是主键索引,如果指定系统会默认创建一个主键索引。多个索引之间的关系:
6、索引使用经验
(1)列的离散型
如何去发挥索引的优势?答案就是列的离散型越高索引检索效率越高,即可选择性最好。
(2)最左匹配原则
对索引关键字进行计算,一定是从左往右依次进行且不跳过。
(3)宽度最小的列优先,单列索引是特殊的联合索引,联合所以,就是把2个字段的值拼接起来做一个索引。
7、覆盖索引
如果查询列可以通过节点中关键字直接返回,则称索引为覆盖索引。
覆盖索引可以减少数据库IO,将随机IO变为顺序IO,提高查询性能。
来源:https://blog.csdn.net/u013174239/article/details/102775468