優化 SQL 語句的步驟
1.分析MySQL伺服器當前的狀態資訊
SHOW SESSION STATUS;
SHOW SESSION STATUS LIKE 'Com_%' //當前會話下所有語句型別的執行次數
//可以瞭解當前應用是以插入更新為主,還是以查詢操作為主,以及各種SQL型別的執行比例大概是多少
SHOW SESSION STATUS LIKE 'InnoDB_rows%'
2.定位執行效率比較低的SQL語句
(1) 慢查詢日誌
檢視當前慢查詢日誌功能是否開啟
SHOW VARIABLES LIKE '%slow_query_log%'
SHOW VARIABLES LIKE '%slow_query_time%' //預設為10秒
測試慢查詢日誌功能
select SLEEP(11),first_name FROM actor where actor_id = 1; //語句會睡眠11秒
在日誌檔案中可以看到上面這個慢SQL
這樣我們就可以通過慢查詢日誌去把這些值時間超過我們預期值的語句挑出來
可以在mysql的配置檔案中配置慢查詢選項,這樣既可永久生效。
(2) 檢視執行中的任務
SHOW PROCESSLIST
這種方式可以顯示當前執行中的SQL語句
select SLEEP(100),first_name FROM actor where actor_id = 1; //睡眠100秒
3.通過Desc或者Explain命令檢視計劃執行
通過慢查詢日誌中獲取到慢的SQL中,通過語句檢視執行計劃
兩條語句的執行結構是一樣的
DESC SELECT * FROM film_actor WHERE film_id = 1;
EXPLAIN SELECT * FROM film_actor WHERE film_id = 1;
KEY | 含義 |
---|---|
type | 表的掃描型別 |
possible_keys | 可能用到的索引 |
key | 實際用到的索引 |
key_leng | 索引的長度 |
rows | 得到結果所需要的查詢的行數 |