EXPLAIN SELECT * FROM orders WHERE user_id=100 AND status=1 ORDER BY create_time DESC LIMIT 20;
重點檢查:type、key、rows、Extra。
SET profiling = 1; -- 執行目標 SQL SELECT * FROM orders WHERE user_id=100 AND status=1 ORDER BY create_time DESC LIMIT 20; -- 查看 Profile SHOW PROFILE FOR QUERY 1;
輸出各階段耗時:starting、checking permissions、Opening tables、init、System lock、optimizing、statistics、preparing、executing、Sending data 等。重點關注 Sending data、executing、Sorting result 高耗時階段。
[mysqld] slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 1 log_queries_not_using_indexes = 1
定期用 pt-query-digest 或 mysqldumpslow 分析,產出 Top N 慢查詢報表,指導索引優化、SQL 改寫、分庫分表決策。
filesort/temporary。