由于mysql数据库的结构是B+数,一颗平衡的二叉树,二叉树的特性我们都知道是判断向左走还是向右走,因此如果说不能判断该索引是需要向左走还是向右走的情况下,则会索引失效。
因此,索引失效的类型可能有以下几种(可能不全):
- 使用like ‘%%’ 酱紫的模糊查询
- 使用!=或<>不等于符号
- 使用or的情况下,如果or的所有查询条件都是索引的话仍是索引仍是不会失效的,否则会失效
- 计算式子如 where num-1=10 可以改成num=11。包括使用datediff等好函数的情况下,只要涉及到参数的一系列计算则都会索引失效。
- 如果MySQL估计使用全表扫描要比使用索引快,比如数据中重复键值过多的情况下,不过也没有谁会用表中状态的字段属性去建索引,了解下就行
- 如果MySQL估计使用全表扫描要比使用索引快,则不使用索引;(不是很懂原理,不知道是怎么评估时间的)