1、使用 show status 瞭解各種 SQL 的執行頻率 該命令可以查詢 sql 命令的執行次數。 2、定位執行效率較低的 SQL 語句 定位執行效率較低的 SQL 一般有兩種方法: 1. 通過慢查詢日誌定位效率低的 SQL,用 該選項啟動; 2. 慢查詢日誌在查詢結束後才會記錄,所以在應用執 ...
1、使用 show status 瞭解各種 SQL 的執行頻率
mysql> show status like 'Com%';
該命令可以查詢 sql 命令的執行次數。
2、定位執行效率較低的 SQL 語句
定位執行效率較低的 SQL 一般有兩種方法:
- 通過慢查詢日誌定位效率低的 SQL,用
--log-show-queries[=file_name]
該選項啟動; - 慢查詢日誌在查詢結束後才會記錄,所以在應用執行效率出現問題的時候慢查詢日誌不能定位問題,這時可以使用
show processlist
命令查看當前 MySQL 在執行的線程,包括線程的狀態、是否鎖表等,可以實時地查看 SQL 的執行情況,同時對一些鎖表操作進行優化;
3、通過 explain 分析低效 SQL 的執行計劃
all < index < range < ref < eq_ref < const, system < null
以上常見的訪問類型從左至右,性能又差到好。
- ALL:全表掃描, MySQL 遍歷全表來匹配行;
- index:索引掃描,MySQL 遍歷整個索引來查詢匹配的行;
- range:索引範圍掃描,常見於 <、<=、>、>=、between 等操作符;
- ref:使用非唯一索引掃描或唯一索引的首碼掃描,返回匹配某個單獨值的記錄行;
- eq_ref:類似 ref,區別就在使用的索引是唯一索引,對於每個索引鍵值,表中只有一條記錄匹配;簡單來說,就是多表連接中使用 primary key 或 unique index 作為關聯條件;
- const / system:單表中最多有一個匹配行,查詢非常迅速,所以這個匹配行中的其它列的值可 以被優化器在當前查詢中當作常量來處理,例如,根據主鍵 primary key 或 唯一索引 unique index 進行查詢;
- NULL:MySQL 不用訪問表或索引,直接就能得到結果;
4、MySQL 4.1 的擴展命令 explain extended
在 MySQL 4.1 引入了 explain extended 命令,通過該命令加上 show warnings,我們能夠得到 SQL 在真正執行之前優化器做了哪些 SQL 改寫。