索引是为了使数据查询的更快,但索引并不是万能的,很多情况下是会失效的,今天在刷视频时,发现原来是有个七字口诀的:模型数空运最快。
模:代表模糊查询,在使用like ‘%...%’与like ‘%...’的情况下都是不走索引的。
字符串类型的索引在写入时是根据字符串的字典序列进行排序的,从第一个字符开始往后依次进行排序,如若使用了非前缀的模糊查询,则排序规则失效。
模糊匹配只在like ‘...%’走索引。
型:代表数据类型,若使用时数据类型与原定义的数据类型不一致也是不走索引的。
不同的数据类型排序规则是不一致的,例如:字典序排序是指按照字母表的顺序对字符串进行排序;长度排序是指按照字符串的长度对字符串进行排序;数字排序是指按照数字的大小对字符串进行排序。
只有遵循原数据格式才走索引。
数:代表函数,若索引字段值加了函数,也是不走索引的。
索引字段是按照字段的原始值进行排序的,若使用了函数,则改变了数据的原始值。
空:代表空值,索引字段值为null的情况也是不走索引的。
索引在排序时是不存值null值的,若在查询条件里加条件 is null或is not null都是不走索引的。
运:代表运算,即对索引字段使用了加减乘除的运算也是不走索引的。
索引字段是按照字段的原始值进行排序的,若使用了运算,则改变了数据的原始值。
最:代表最左原则,复合索引若查询的字段不是从第一个复合索引里的字段开始的,也是不走索引的。
索引在排序时,遵循的是从左到右的排序规则。
快:代表全表扫描更快,如果优化器认为全表扫描比走索引查询的更快,则不走索引。