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 改寫,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/81218.html
標籤:MySQL
