mysqlidxchk 是一款實用的 MySQL 索引分析工具,專門用於檢測資料庫中未被使用的索引。它能夠讀取一般查詢日誌或慢查詢日誌,分析實際執行的 SQL 語句,找出那些佔用磁碟空間且增加寫入負擔卻從未被查詢優化器使用的索引,幫助 DBA 精簡索引結構,提升寫入效能。
mysqlidxchk -D databaseA -s /var/log/mysql/mysql-slow.log -g
上述指令針對 databaseA 資料庫,讀取慢查詢日誌進行分析,並產生報告。
| 參數 | 簡寫 | 說明 |
|---|---|---|
| --general LOG | -g | 從一般查詢日誌讀取 SQL 語句,可指定多個檔案,以逗號分隔 |
| --slow LOG | -s | 從慢查詢日誌讀取 SQL 語句,可指定多個檔案 |
| --raw LOG | -r | 從原始日誌讀取 SQL,語句間以分號分隔 |
| --user USER | -u | 連線 MySQL 使用者帳號 |
| --password PASS | -p | 使用者密碼(或留空提示輸入) |
| --host ADDRESS | -h | MySQL 伺服器位址 |
| --port PORT | -P | 連線埠號 |
| --socket SOCKET | -S | Unix socket 檔案路徑 |
| --no-mycnf | 不讀取 ~/.my.cnf 設定檔 | |
| --help | 顯示說明資訊 | |
| --debug | 輸出除錯資訊 | |
| --discovery-report | 列印資料庫發現報告 | |
| --grep P | 以 Perl 正則模式篩選 SQL 語句 | |
| --ignore-update | 忽略 UPDATE 語句 | |
| --no-discovery | 不嘗試自動發現資料庫結構 | |
| --show-all-databases | 顯示所有資料庫 | |
| --show-only-databases D | 僅顯示指定資料庫(逗號分隔) | |
| --show-used-indexes | 顯示已被使用的索引 |
--slow 參數使用生產環境的慢查詢日誌,結果最具參考價值。DROP INDEX。--show-used-indexes 可同時確認高頻使用的索引,作為調整索引策略的依據。mysqlidxchk 是輕量級且強大的索引審計工具,善用它能有效減少冗餘索引,降低寫入放大,釋放儲存空間,是 MySQL DBA 維護工具箱中的必備利器。