在大多数实际的系统中,慢 SQL 消耗掉的数据库资源,往往是正常 SQL 的几倍、几十倍甚至几百倍。

怎样才能在开发阶段尽量避免写出慢 SQL 呢?

估算数据量

慢 SQL 对数据库的影响,是一个量变到质变的过程,对“量”的把握,就很重要。编写一条查询语句的时候,可以依据你要查询数据表的数据总量,估算一下这条查询大致需要遍历多少行数据。

使用索引

使用索引可以有效地减少执行查询时遍历数据的行数,提高查询性能。在每次开发新功能,需要给数据库增加一个新的查询时,都要评估一下,是不是有索引可以支撑新的查询语句,如果有必要的话,需要新建索引来支持新增的查询。但是,增加索引付出的代价是,会降低数据插入、删除和更新的性能。增加了索引,在数据变化的时候,不仅要变更数据表里的数据,还要去变更每个索引。所以,对于更新频繁并且对更新性能要求较高的表,可以尽量少建索引。而对于查询较多更新较少的表,可以根据查询的业务逻辑,适当多建一些索引。

分析 SQL 执行计划

在你的 SQL 语句前面加上 EXPLAIN 关键字,然后执行这个查询语句就可以了。
对于复杂的查询,最好使用 SQL 执行计划,事先对查询做一个分析。在 SQL 执行计划的结果中,可以看到查询预估的遍历行数,命中了哪些索引。执行计划也可以很好地帮助你优化你的查询语句。例如:
EXPLAIN select * from auth_permission where name like 'Can add%';
怎么避免写出慢SQL-LMLPHP

EXPLAIN select * from auth_permission where left(name,7) = 'Can add’;
怎么避免写出慢SQL-LMLPHP

优化SQL

优化SQL,提升查询效率。对于添加的索引列考虑是否会实效的导致全表扫描的情况。

使用慢查询日志分析

MySQL 慢查询日志是排查问题 SQL 语句,以及检查当前 MySQL 性能的一个重要功能

Mysql开启慢查询日志

05-04 02:15