Mysql索引底层数据结构

哈希索引
在这里插入图片描述
哈希值是无序的,不可以范围查找,排序的话,也不能使用哈希值进行排序,而且会有哈希冲突

平衡二叉树
在这里插入图片描述
树越高查询速度越慢,还有一种情况就是不如查找大于五的数据,需要进行数据回旋,所以平衡二叉树不是最好的选择

B树
在这里插入图片描述
可以看出,B树一个节点可以存多个值,解决了二叉树的高度的问题,树越矮查找速度就越快,但是B树还有回旋查找的问题。

B+树
在这里插入图片描述
加入了链表,B+树完美解决了回旋查找的问题

索引失效的原因

多个键值的B+树:
在这里插入图片描述
在这里插入图片描述
可以看出来:a值是有顺序的,当a相同的时候b值才有顺序,同理字母也是按照顺序排序A-Z

在这里插入图片描述
这里面的"1212",就相当于a,如果没有遵循最左前缀法则,b就是无序的,想要在无序中找到b里面的记录,是用不到索引的,只能进行全表扫描

当查询语句使用>号的时候,索引失效

在这里插入图片描述
即使确定了大于1的数据,2,但是对应的值也是无需的。

同理,当查询条件使用%作为前缀的时候,索引失效
在这里插入图片描述
可以以%为后缀,如果%作为前缀的时候,值是没有顺序的

还有很多情况都会失效,同理在这里就不多说了。

更多推荐