索引数据结构的分类
MySQL索引的数据结构主要有B+树和哈希表。
对应的索引分别为B+树索引和哈希索引。
InnoDB引擎默认的索引类型为B+树索引。
B+树索引
B+树是基于B树和叶子节点顺序访问指针进行实现。
它具有B树的平衡性,并且通过顺序访问指针来提高区间查询的性能。
在B+树中,节点中的key从左到右递增排列。
如果某个指针的左右相邻key分别是key[i]和key[i+1], 则该指针指向节点的所有key大于等于key[i]且小于等于key[i+1]。
进行查找操作时,首先在根节点进行二分查找,找到key所在的指针。然后递归地在指针所指向的节点进行查找。直到查找到叶子节点,然后在叶子节点上进行二分查找,找出key所对应的数据项。
MySQL数据库使用最多的索引类型是BTREE索引,底层是基于B+树数据结构来实现的。
哈希索引
哈希索引是基于哈希表实现的。
对于每一行数据,存储引擎会对索引列进行哈希计算得到哈希码。
并且哈希算法要尽量保证不同的列值计算出的哈希码值是不同的,将哈希码的值作为哈希表的key值,将指向数据行的指针作为哈希表的value值。
这样查找一个数据的时间复杂度就是O(1), 一般多用于精确查找。
参考资料:MySQL索引的数据结构