Mysql索引失效的场景分析

发布时间:2026/10/11 4:10:50
Mysql索引失效的场景分析 前言日常使用Mysql做一些业务时发现很慢跟踪日志发现是有慢查询语句于是使用explain查看执行计划发现是没有使用到索引一般这些情况都不是java框架导致的一般框架里都会根据主键或者指定的条件去做简单的查询复杂的查询都是通过sql原生写法来实现的这种原生写法最容易产生类似这样的问题。产生索引失效的场景1、在sql中使用了函数比如sum,count等内置函数这种情况下即使where条件中使用到了索引也会索引失效。2、在where语句中使用到了联合索引但是使用的时候违反了最左原则。比如联合索引创建的时候为name,age 但是使用的时候确实where age 1 and name ‘cz’,这样会导致age的索引失效仅剩name索引。3、在查询语句中一些字段的属性错误比如name的字段定义为varchar,但是使用的时候条件写成了where namecz,这样会导致mysql在真实查询的时候查找索引失败。4、在sql中如果使用模糊查询但是字段为全模糊的比如where name like ‘%cz%’,这种场景下索引是失效的如果使用的语句为where name like ‘cz%’,那么这种索引反而是生效的。5、在查询语句中出现了or那么这个语句是不会使用到索引的以上这些就是在写sql时经常遇到的一些索引失效的场景。如果在java中如果使用mybatis则需要手写sql,所以上面的场景需要格外注意。其他慢sql调优手段1、避免使用select * 多余的字段会消耗IO2、使用索引3、使用join替换in看具体数据库来决定原因分布式数据库exists效率低4、join优化如果执行计划中有使用Block-Nasted-Loop,需要根据实际情况增加缓存区的内存空间5、大结果集的排序如果结果集很大会涉及到文件排序File-sort,需要根据业务拆分为小结果集再排序6、在使用inner join时如果优化器判断有误这个时候要使用straght join来指定驱动表 hint方式7、在查询语句中如果优化器使用索引不合理需要使用FORCE INDEX指定索引。hint方式8、delete/update关联操作DML直接JOIN关联两张实体表改成关联1张实体表和1个Join结果集9、大事务拆分提交如果一次事务太大可能会堵塞小事务的提交10、使用group by进行分组查询时默认会按照分组字段进行排序也就是默认会在语句后面添加order by

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询