如何最佳化SQL語句,看這篇就夠了

1。分析MySQL伺服器當前的狀態資訊

SHOW SESSION STATUS;

SHOW SESSION STATUS LIKE

‘Com_%’

//當前會話下所有語句型別的執行次數

如何最佳化SQL語句,看這篇就夠了

//可以瞭解當前應用是以插入更新為主,還是以查詢操作為主,以及各種SQL型別的執行比例大概是多少

SHOW SESSION STATUS LIKE

‘InnoDB_rows%’

如何最佳化SQL語句,看這篇就夠了

2。定位執行效率比較低的SQL語句

(1) 慢查詢日誌

檢視當前慢查詢日誌功能是否開啟

SHOW VARIABLES LIKE

‘%slow_query_log%’

如何最佳化SQL語句,看這篇就夠了

SHOW VARIABLES LIKE

‘%slow_query_time%’

//預設為10秒

如何最佳化SQL語句,看這篇就夠了

測試慢查詢日誌功能

select SLEEP(11),first_name FROM actor

where

actor_id = 1; //語句會睡眠11秒

在日誌檔案中可以看到上面這個慢SQL

如何最佳化SQL語句,看這篇就夠了

這樣我們就可以透過慢查詢日誌去把這些值時間超過我們預期值的語句挑出來

可以在mysql的配置檔案中配置慢查詢選項,這樣既可永久生效。

如何最佳化SQL語句,看這篇就夠了

如何最佳化SQL語句,看這篇就夠了

(2) 檢視執行中的任務

SHOW PROCESSLIST

這種方式可以顯示當前執行中的SQL語句

select SLEEP(100),first_name FROM actor

where

actor_id = 1; //睡眠100秒

如何最佳化SQL語句,看這篇就夠了

3。透過Desc或者Explain命令檢視計劃執行

透過慢查詢日誌中獲取到慢的SQL中,透過語句檢視執行計劃

兩條語句的執行結構是一樣的

DESC SELECT * FROM film_actor WHERE film_id = 1;

EXPLAIN SELECT * FROM film_actor WHERE film_id = 1;

如何最佳化SQL語句,看這篇就夠了

KEY

含義

type

表的掃描型別

possible_keys

可能用到的索引

key

實際用到的索引

key_leng

索引的長度

rows

得到結果所需要的查詢的行數

最後確定問題並採取相應的最佳化措施#

作者 | antaia11