外观
如何判断一个 SQL 语句是否是慢 SQL
开启慢查询日志
慢查询日志是MySQL中用于记录执行时间超过指定阈值的SQL语句的工具。通过配置和分析慢查询日志,可以快速定位慢SQL。
检查慢查询日志是否开启:
SHOW VARIABLES LIKE 'slow_query_log';
如果
slow_query_log
的值为OFF
,则需要开启慢查询日志。开启慢查询日志:
SET GLOBAL slow_query_log = ON;
设置慢查询的临界值: 默认情况下,
long_query_time
的值为10秒,表示执行时间超过10秒的SQL语句会被记录。可以根据需要调整这个值,例如设置为0.1秒:SET GLOBAL long_query_time = 0.1;
这样,执行时间超过0.1秒的SQL语句都会被记录到慢查询日志中。
设置日志文件位置:
SET GLOBAL slow_query_log_file = '/path/to/your/slow-query.log';
查看慢查询日志: 慢查询日志文件会记录所有符合条件的SQL语句及其执行时间、锁等待时间等信息。可以通过查看日志文件来分析哪些SQL语句执行较慢。
使用EXPLAIN
分析SQL
EXPLAIN
是MySQL提供的一个工具,用于分析SQL语句的执行计划。通过EXPLAIN
,可以了解SQL语句是否使用了索引、扫描了多少行数据等信息。执行EXPLAIN
:
EXPLAIN SELECT * FROM your_table WHERE your_condition;
关注以下字段:
possible_keys
:可能使用的索引。key
:实际使用的索引。rows
:扫描的行数。如果这个值很大,说明SQL语句可能需要优化。
使用性能详情(Profiling)
如果通过EXPLAIN
无法确定问题,可以开启性能详情来进一步分析SQL语句的执行过程。
开启性能详情:
SET profiling = ON;
执行SQL语句: 执行需要分析的SQL语句。
查看性能记录:
SHOW PROFILES; SHOW PROFILE FOR QUERY query_id;
通过性能记录,可以查看SQL语句各个阶段的耗时情况,从而定位到具体哪个环节耗时较多。
使用工具分析
还可以使用一些工具来分析慢查询日志,例如mysqldumpslow
。
查看最慢的SQL语句:
mysqldumpslow -s t -t 10 /path/to/your/slow-query.log
查看出现次数最多的SQL语句:
mysqldumpslow -s c -t 10 /path/to/your/slow-query.log