Mysql索引底层数据结构,索引失效的原因(符合最左匹配原则)

Mysql索引底层数据结构

哈希索引
Mysql索引底层数据结构,索引失效的原因(符合最左匹配原则)_第1张图片
哈希值是无序的,不可以范围查找,排序的话,也不能使用哈希值进行排序,而且会有哈希冲突

平衡二叉树
Mysql索引底层数据结构,索引失效的原因(符合最左匹配原则)_第2张图片
树越高查询速度越慢,还有一种情况就是不如查找大于五的数据,需要进行数据回旋,所以平衡二叉树不是最好的选择

B树
Mysql索引底层数据结构,索引失效的原因(符合最左匹配原则)_第3张图片
可以看出,B树一个节点可以存多个值,解决了二叉树的高度的问题,树越矮查找速度就越快,但是B树还有回旋查找的问题。

B+树
Mysql索引底层数据结构,索引失效的原因(符合最左匹配原则)_第4张图片
加入了链表,B+树完美解决了回旋查找的问题

索引失效的原因

多个键值的B+树:
Mysql索引底层数据结构,索引失效的原因(符合最左匹配原则)_第5张图片
Mysql索引底层数据结构,索引失效的原因(符合最左匹配原则)_第6张图片
可以看出来:a值是有顺序的,当a相同的时候b值才有顺序,同理字母也是按照顺序排序A-Z

Mysql索引底层数据结构,索引失效的原因(符合最左匹配原则)_第7张图片
这里面的"1212",就相当于a,如果没有遵循最左前缀法则,b就是无序的,想要在无序中找到b里面的记录,是用不到索引的,只能进行全表扫描

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

Mysql索引底层数据结构,索引失效的原因(符合最左匹配原则)_第8张图片
即使确定了大于1的数据,2,但是对应的值也是无需的。

同理,当查询条件使用%作为前缀的时候,索引失效
Mysql索引底层数据结构,索引失效的原因(符合最左匹配原则)_第9张图片
可以以%为后缀,如果%作为前缀的时候,值是没有顺序的

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

你可能感兴趣的:(mysql高级以及sql优化,合集(必会),mysql,索引)