MySQL中会使索引失效的几种情况

本文深入探讨MySQL中索引的使用场景与优化策略,包括NULL值处理、OR条件查询、多列索引应用等,旨在提升数据库查询效率。

      有表 test ;字段 id int(11) default nullmark varchar(20) default null;索引key_test_idid上:
1.当查询条件带有is null的时候:
依夜知秋
可以看到使用了索引。
2.当查询条件是is not null的时候:
依夜知秋
可以看到没有使用索引。
        从网上查一些资料得知,MySQL存储NULL值是需要空间的,NULL并不是什么都没有,因此在没有需要的情况下,字段最好设置为NOT NULL。具体可参考一下几篇文章:
        MySQL字段属性应该尽量设置为NOT NULL
        mysql 索引列为Null的走不走索引及null在统计时的问题
3.使用or的时候,如果条件中的字段不是全部都带有索引,则不会使用索引:
依夜知秋
可以看到,由于mark字段上没有建立索引,所以id上的索引也没有使用。假如在mark上建立索引:
依夜知秋
再次执行相同的语句:
依夜知秋
可以看到到使用了索引。(这里sql语句有点语法错误,\G后边不需要加;
关于上图Extra字段有Using where的提示,可以参考下文:
MYSQL EXPLAIN解析一 EXTRA中的USING INDEX,USING WHERE,USING INDEX CONDITION
上篇文章可能不太符合这个情景,但可以当作学习用。这种情况可以看这篇:
【MySQL】性能优化之 index merge (1)
4.有多列索引的时候,如果不使用多列索引的第一个字段,则不会使用索引。
有以下表结构:
依夜知秋
进行以下查询:
依夜知秋
可以看到并没有使用多列索引,因为i2并不是多列索引的第一个字段。若进行下面的查询:
依夜知秋
则可以看到使用了多列索引。
更多可以参考:
Mysql索引会失效的几种情况分析
详细例子后边再补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值