• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Mysql中SQL语句不使用索引的情况
    POST TIME:2021-10-18 20:38

    MySQL查询不使用索引汇总

    众所周知,增加索引是提高查询速度的有效途径,但是很多时候,即使增加了索引,查询仍然不使用索引,这种情况严重影响性能,这里就简单总结几条MySQL不使用索引的情况

    如果MySQL估计使用索引比全表扫描更慢,则不使用索引。例如,如果列key均匀分布在1和100之间,下面的查询使用索引就不是很好:select * from table_name where key>1 and key90;

    如果使用MEMORY/HEAP表,并且where条件中不使用“=”进行索引列,那么不会用到索引,head表只有在“=”的条件下才会使用索引

    用or分隔开的条件,如果or前的条件中的列有索引,而后面的列没有索引,那么涉及到的索引都不会被用到,例如:select * from table_name where key1='a' or key2='b';如果在key1上有索引而在key2上没有索引,则该查询也不会走索引

    复合索引,如果索引列不是复合索引的第一部分,则不使用索引(即不符合最左前缀),例如,复合索引为(key1,key2),则查询select * from table_name where key2='b';将不会使用索引

    如果like是以‘%'开始的,则该列上的索引不会被使用。例如select * from table_name where key1 like '%a';该查询即使key1上存在索引,也不会被使用

    如果列为字符串,则where条件中必须将字符常量值加引号,否则即使该列上存在索引,也不会被使用。例如,select * from table_name where key1=1;如果key1列保存的是字符串,即使key1上有索引,也不会被使用。

    从上面可以看出,即使我们建立了索引,也不一定会被使用,那么我们如何知道我们索引的使用情况呢??在MySQL中,有Handler_read_keyHandler_read_rnd_key两个变量,如果Handler_read_key值很高而Handler_read_rnd_key的值很低,则表明索引经常不被使用,应该重新考虑建立索引。可以通过:show status like 'Handler_read%'来查看着连个参数的值。

    关于如何正确创建Mysql的索引,请参考怎样正确创建MySQL索引的方法详解;众所周知,数据表索引可以提高数据的检索效率,也可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本;但索引并不是时时都会生效的,比如以下几种情况,将导致索引失效:

    1.如果条件中有or,即使其中有条件带索引也不会使用索引(这也是为什么SQL语句中尽量少用or的原因)

    注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引。

    2.对于多列索引,不是使用的第一部分,则不会使用索引。

    3.like查询是以%开头时不会使用索引。

    4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引。

    5.如果 mysql 估计使用全表扫描要比使用索引快,则不使用索引。

    此外,查看索引的使用情况

    show status like 'Handler_read%';

    大家可以注意:

    handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。

    handler_read_rnd_next:这个值越高,说明查询越低效。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    您可能感兴趣的文章:
    • MySQL存储时间类型选择的问题讲解
    • MySQL中decimal类型用法的简单介绍
    • Mysql将一个表中的某一列数据复制到另一个表中某一列里的方法
    • 如何提高MySQL Limit查询性能的方法详解
    • Mysql主从数据库(Master/Slave)同步配置与常见错误
    • Mysql Explain命令的使用与分析
    • 怎样正确创建MySQL索引的方法详解
    • Mysql中replace与replace into的用法讲解
    • 通过MySQL慢查询优化MySQL性能的方法讲解
    • MySQL使用命令创建、删除、查询索引的介绍
    上一篇:怎样正确创建MySQL索引的方法详解
    下一篇:Mysql Explain命令的使用与分析
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信