首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

如何快速找出 MySQL 執行緩慢的 SQL 語句(慢查詢日誌實戰)

     編輯:MySQL 資料庫相關知識

開啟慢查詢日誌

編輯 MySQL 設定檔(my.cnf 或 my.ini),在 [mysqld] 區段新增:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2          -- 超過 2 秒記錄
log_queries_not_using_indexes = 1  -- 記錄未用索引的查詢

重啟 MySQL 服務生效:systemctl restart mysqld 或 service mysqld restart。

分析慢查詢日誌

方法一:mysqldumpslow 官方工具

# 排序前 10 筆最耗時查詢
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log

# 排序查詢次數最多
mysqldumpslow -s c -t 10 /var/log/mysql/slow.log

方法二:pt-query-digest(Percona Toolkit,功能更強)

pt-query-digest /var/log/mysql/slow.log --limit 20 --output json > slow_report.json

優化常見慢查詢模式

  • 缺少索引:EXPLAIN SELECT ... 檢查 type=ALL(全表掃描),補加索引;
  • 隱式類型轉換:WHERE 欄位與常數類型不符導致索引失效;
  • LIKE 開頭萬用字元:LIKE '%keyword%' 無法使用索引,改用全文索引;
  • 大表 JOIN 未加索引:確保 JOIN 欄位有索引且資料型別一致;
  • SELECT *:僅查詢必要欄位,減少 I/O 與網路傳輸。

進階:效能 Schema 與 sys Schema

MySQL 5.6+ 可啟用 performance_schema,配合 sys.schema 視圖直接查詢 sys.statements_with_runtimes_in_95th_percentile 等現成報表,無需解析文字日誌。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved