索引主要是帮助数据库系统高效获取数据的数据结构。
如果数据量比较少,是否使用索引对结果的影响并不大,比如数据不超过 1000 行,那么可以不建索引。
按照逻辑功能上分,有普通索引,唯一索引,主键索引,全文索引。
按照物理实现方式,索引可以分2种:聚集索引和非聚集索引。
索引常见的模型有:哈希表、二叉排序树、平衡二叉树、B树、B+树。
二叉排序树的特点是:每个节点的左儿子小于父节点,父节点又小于右儿子。
二叉排序树搜索 key 过程:
二叉排序树最大的问题是可能出现二叉树的深度大的问题。,如果一个是二叉树 按照 【 5 22 23 24 34 77 89 91】 这个顺序创造二叉排序树,那么树的深度会非常高。
这样的二叉树就变成了一个类似链表的超过,时间复杂度不再是 O(logN) 而是 O(N) , 因此便有了平衡二叉树。
平衡二叉树的特点: 平衡二叉树的特点是左子树和右子树的高度不能超过1,也就是说,左子树和右子树也是平衡二叉树。
这样就可以保证二叉树搜索时间复杂度是O(logN)。
但是由于是二叉树,随着数据量变大,树还是会非常高的,但是如果是 M 叉数,数的高度会降低,于是有了 B 数。
B 树也叫 Balance Tree ,也称为平衡的多路搜索树。
B 树的特点:
B 树结构:
B 树的查找过程如下:比如要查找关键字 9
B+ 树是在 B 树上的改进。
B+ 树的特点:
B+树结构如下:
比如,我们想要查找关键字16,查找过程如下:
B+树比B树 更加矮胖,因为叶子节点不存储数据,因此能够存储更多的索引,阶数更大,深度更低,和磁盘 IO 的交互更少,查询效率也更快。并且, B+ 树在叶子节点上,通过有序链表,方便范围查找。
MySQL 把页作为存储空间的基本单位,一个页大小一般是 16 KB 。
页结构如下:
B+树结构:
要提升索引性能,主要是减少磁盘 IO 交互的次数,因此可以使用多叉树,让树形结构变得矮胖,减少磁盘交互。在页大小相同的情况下 B+ 树非叶子节点不存储数据,因此能有更多阶,树变得更加矮胖,磁盘交互即可减少,提升索引性能。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。