1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > MySQL什么情况会导致索引失效?

MySQL什么情况会导致索引失效?

时间:2021-06-14 04:00:21

相关推荐

MySQL什么情况会导致索引失效?

MySQL 索引失效

一、以下情况会导致 MySQL 索引失效:二、那么为什么上面这些情况会导致索引失效呢?我们要知其然知其所以然。01. 先分析一个遵循最佳最左原则的例子,分析如下:02. 再来看看不遵循最佳左前缀的例子,分析如下:03. 范围查询右边失效原理三、总结:

一、以下情况会导致 MySQL 索引失效:

如果左边的值未确定,那么无法使用此索引。

比如:select * from table where a>1 and b=2; (a不确定,所以a和b 的联合索引就用不到。)。计算、函数、类型转换 ( 自动或手动 ) 导致索引失效。is null 可以使用索引,is not null 无法使用索引。or 前后只要存在非索引的列,都会导致索引失效。like 查询是以 % 开头(eg:like %王)。

二、那么为什么上面这些情况会导致索引失效呢?我们要知其然知其所以然。

01. 先分析一个遵循最佳最左原则的例子,分析如下:

select * from testTable where a=1 and b=2

首先 a 字段在B+树上是有序的,所以我们可以通过二分查找法来定位到a=1的位置。

其次在 a 确定的情况下,b 是相对有序的,因为有序,所以同样可以通过二分查找法找到 b=2 的位置。

其次在 a 确定的情况下,b 是相对有序的,因为有序,所以同样可以通过二分查找法找到 b=2 的位置。

02. 再来看看不遵循最佳左前缀的例子,分析如下:

select * from testTable where b=2

我们来回想一下 b 有顺序的前提是:在 a 确定的情况下。

现在你的 a 都飞了,那 b 肯定是不能确定顺序的,在一个无序的 B+树上是无法用二分查找来定位到 b 字段的。

所以这个时候,是用不上索引的。

03. 范围查询右边失效原理

字符串的排序方式:先按照第一个字母排序,如果第一个字母相同,就按照第二个字母排序。。。以此类推。

三、总结:

简单来说,索引查找就是二分查找,凡是不能二分查找的情况都属于索引失效的情况。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。