IT世界|导致MySQL索引失效的几种常见写法,请看这里( 三 )


IT世界|导致MySQL索引失效的几种常见写法,请看这里8、IS NULL不走索引 , IS NOT NULL走索引SELECT * FROM `user` WHERE address IS NULL
IT世界|导致MySQL索引失效的几种常见写法,请看这里不走索引 。
SELECT * FROM `user` WHERE address IS NOT NULL;
IT世界|导致MySQL索引失效的几种常见写法,请看这里走索引 。
根据这个情况 , 建议大家在设计字段的时候 , 如果没有必要的要求必须为NULL , 那么最好给个默认值空字符串 , 这可以解决很多后续的麻烦(有深刻的体验<体验=教训>) 。
符合索引1、最左匹配原则EXPLAIN SELECT * FROM `user` WHERE name = '冰峰' AND sex = '男';测试之前 , 删除其他的单列索引 。
啥叫最左匹配原则 , 就是对于符合索引来说 , 它的一个索引的顺序是从左往右依次进行比较的 , 像第二个查询语句 , name走索引 , 接下来回去找age , 结果条件中没有age那么后面的sex也将不走索引 。
IT世界|导致MySQL索引失效的几种常见写法,请看这里注意:
SELECT * FROM `user` WHERE sex = '男' AND age = 22 AND `name` = '冰峰';可能有些搬砖工可能跟我最开始有个误解 , 我们的索引顺序明明是name、sex、age , 你现在的查询顺序是sex、age、name , 这肯定不走索引啊 , 你要是自己没测试过 , 也有这种不成熟的想法 , 那跟我一样还是太年轻了 , 它其实跟顺序是没有任何关系的 , 因为mysql的底层会帮我们做一个优化 , 它会把你的SQL优化为它认为一个效率最高的样子进行执行 。 所以千万不要有这种误解 。
2、如果使用了!=会导致后面的索引全部失效SELECT * FROM `user` WHERE sex = '男' AND `name` != '冰峰' AND age = 22;我们在name字段使用了 !=, 由于name字段是最左边的一个字段 , 根据最左匹配原则 , 如果name不走索引 , 后面的字段也将不走索引 。
IT世界|导致MySQL索引失效的几种常见写法,请看这里关于符合索引导致索引失效的情况能说的目前就这两种 , 其实我觉得对于符合索引来说 , 重要的是如何建立高效的索引 , 千万不能说我用到那个字段我就去建立一个单独的索引 , 不是就可以全局用了嘛 。 这样是可以 , 但是这样并没有符合索引高效 , 所以为了成为高级的搬砖工 , 我们还是要继续学习 , 如何创建高效的索引 。
作者:一个程序员的成长
链接: