IT世界|导致MySQL索引失效的几种常见写法,请看这里( 三 )
8、IS NULL不走索引 , IS NOT NULL走索引SELECT * FROM `user` WHERE address IS NULL
不走索引 。
SELECT * FROM `user` WHERE address IS NOT NULL;
走索引 。
根据这个情况 , 建议大家在设计字段的时候 , 如果没有必要的要求必须为NULL , 那么最好给个默认值空字符串 , 这可以解决很多后续的麻烦(有深刻的体验<体验=教训>) 。
符合索引1、最左匹配原则EXPLAIN SELECT * FROM `user` WHERE name = '冰峰' AND sex = '男';
测试之前 , 删除其他的单列索引 。
啥叫最左匹配原则 , 就是对于符合索引来说 , 它的一个索引的顺序是从左往右依次进行比较的 , 像第二个查询语句 , name走索引 , 接下来回去找age , 结果条件中没有age那么后面的sex也将不走索引 。
注意:
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不走索引 , 后面的字段也将不走索引 。
关于符合索引导致索引失效的情况能说的目前就这两种 , 其实我觉得对于符合索引来说 , 重要的是如何建立高效的索引 , 千万不能说我用到那个字段我就去建立一个单独的索引 , 不是就可以全局用了嘛 。 这样是可以 , 但是这样并没有符合索引高效 , 所以为了成为高级的搬砖工 , 我们还是要继续学习 , 如何创建高效的索引 。
作者:一个程序员的成长
链接:
- 刘哥说游戏|国乒四大世界冠军收到国际乒联邀请,将参加世界杯!但却引起争议
- 快了棒棒糖|你知道几种?,世界各国的通用弹药
- 新华网|专家:我国迎来成为新的世界贸易中心的历史性机遇
- 归处|世界上3个最美丽的火车站-你认为中国最漂亮的是哪个?
- 诗呓|拥有多个世界之最,让人大开眼界,却鲜少人知,贵州超低调的城市
- 央视新闻客户端|世界周刊丨特朗普疫苗计划争议连连美国“十月惊奇”要来了么?
- 人民币|摩根士丹利:人民币10年内将成为世界第三大储备货币
- 世界军事|世界军事实力排行榜:美国依旧稳居第一,那么中国在第几呢?
- 魔兽|魔兽世界:燃烧军团洗白在即?暴雪埋下二十年伏笔,伊瑟拉也是反派
- 绝地求生|期待一年半的宝藏手游终于测试!开放世界真实场景,刷新生存新高度