mysql优化,导致查询不走索引的原因总结
2017-05-19 13:07
676 查看
最近公司让我做SQL优化的工作(MySql),用explain发了一些问题。常见的像OR ,IN,>= ,或者是嵌套等导致索引失效,导致查询性能降低的问题在这里就不做陈述了,网上的文章一搜一 大片。我只是写点个人工作中遇到的,网上不好搜索的,但是不保证所有的场景都试用,后续我还会更新。
1、order by 和 limit 结合使用,如果where 字段,order by字段都是索引,那么有limit索引会使用order by字段所在的索引。没有limit会使用where 条件的索引。遇到此类状况可以考虑用子查询将order
by 和 limit 分开。这种情况主要发生在你用了多个索引,那么你需要注意了。它可能不执行你希望的走索引。(我觉得mysql会自动计算索引)
2、DATE_FORMAT()格式化时间,格式化后的时间再去比较,可能会导致索引失效。
3、子查询中order by的索引会失效,同时可能导致子查询中的where条件索引都不能用。
4、字符集的使用导致不走索引,有时你会发现用一个SQL 条件值不同可能会有天的差别(我之前遇到的 两个不同的ID号,一个查询80s,一个不到1s)
5、like语句
6、列类型为字符串类型,查询时没有用单引号引起来
7、在where查询语句中使用表达式
8、在where查询语句中对字段进行NULL值判断
9、在where查询中使用了or关键字, myisam表能用到索引, innodb不行;(用UNION替换OR,可以使用索引) 10、全表扫描快于索引扫描(数据量小时)
先说这几条.如果查看执行计划不理想的话,我建议在启动数据库时加上两个启动参数,会看的更清楚(每个表的执行次数和执行时间)
--log-slow-queries (查询日志)
--log-queries-not-using-indexes (查询未使用索引日志)
最后的优化方式就是测试,因为业务的不同优化理论不可能总是可以带来很高的效率,利用explain或desc查看,然后再真的某个查询或表做改进吧。
1、order by 和 limit 结合使用,如果where 字段,order by字段都是索引,那么有limit索引会使用order by字段所在的索引。没有limit会使用where 条件的索引。遇到此类状况可以考虑用子查询将order
by 和 limit 分开。这种情况主要发生在你用了多个索引,那么你需要注意了。它可能不执行你希望的走索引。(我觉得mysql会自动计算索引)
2、DATE_FORMAT()格式化时间,格式化后的时间再去比较,可能会导致索引失效。
3、子查询中order by的索引会失效,同时可能导致子查询中的where条件索引都不能用。
4、字符集的使用导致不走索引,有时你会发现用一个SQL 条件值不同可能会有天的差别(我之前遇到的 两个不同的ID号,一个查询80s,一个不到1s)
5、like语句
6、列类型为字符串类型,查询时没有用单引号引起来
7、在where查询语句中使用表达式
8、在where查询语句中对字段进行NULL值判断
9、在where查询中使用了or关键字, myisam表能用到索引, innodb不行;(用UNION替换OR,可以使用索引) 10、全表扫描快于索引扫描(数据量小时)
先说这几条.如果查看执行计划不理想的话,我建议在启动数据库时加上两个启动参数,会看的更清楚(每个表的执行次数和执行时间)
--log-slow-queries (查询日志)
--log-queries-not-using-indexes (查询未使用索引日志)
最后的优化方式就是测试,因为业务的不同优化理论不可能总是可以带来很高的效率,利用explain或desc查看,然后再真的某个查询或表做改进吧。
相关文章推荐
- Mysql优化,导致查询不走索引的原因总结
- 「mysql优化专题」单表查询优化的一些小总结,非索引设计(3)
- mysql慢查询原因分析与解决(三)——索引及查询优化
- MySQL索引及查询优化总结 专题
- MySQL索引及查询优化总结
- MySQL前缀索引导致的慢查询分析总结
- MySQL 索引及查询优化总结
- MySQL前缀索引导致的慢查询分析总结
- 「mysql优化专题」单表查询优化的一些小总结,非索引设计(3)
- MySQL查询优化技术系列讲座之使用索引(二)
- Mysql多列索引,查询优化
- MySQL查询优化技术之使用索引
- mysql慢查询优化篇之复合索引
- MYSQL查询优化:使用索引
- mysql查询、索引、配置优化
- Mysql的索引和查询优化
- mysql索引优化手册总结版本
- MySQL查询优化技术系列讲座之使用索引
- MySQL索引与查询优化
- MySQL优化索引及优化汉字模糊查询语句