優化 SQL 語句的步驟


優化 SQL 語句的步驟

1.分析MySQL服務器當前的狀態信息

SHOW SESSION STATUS;
SHOW SESSION STATUS LIKE 'Com_%' //當前會話下所有語句類型的執行次數

image-20210806143701086

//可以了解當前應用是以插入更新為主,還是以查詢操作為主,以及各種SQL類型的執行比例大概是多少
SHOW SESSION STATUS LIKE 'InnoDB_rows%' 

image-20210806143641132

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

(1) 慢查詢日志

查看當前慢查詢日志功能是否開啟

SHOW VARIABLES LIKE '%slow_query_log%'

image-20210806144319107

SHOW VARIABLES LIKE '%slow_query_time%' //默認為10秒

image-20210806144357384

測試慢查詢日志功能

select SLEEP(11),first_name FROM actor where actor_id = 1; //語句會睡眠11秒

在日志文件中可以看到上面這個慢SQL

image-20210806144452183

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

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

image-20210806144639673

image-20210806144732503

(2) 查看執行中的任務
SHOW PROCESSLIST

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

select SLEEP(100),first_name FROM actor where actor_id = 1; //睡眠100秒

image-20210806144959577

3.通過Desc或者Explain命令查看計划執行

通過慢查詢日志中獲取到慢的SQL中,通過語句查看執行計划

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

DESC SELECT * FROM film_actor WHERE film_id = 1;
EXPLAIN SELECT * FROM film_actor WHERE film_id = 1;

image-20210806145922822

KEY 含義
type 表的掃描類型
possible_keys 可能用到的索引
key 實際用到的索引
key_leng 索引的長度
rows 得到結果所需要的查詢的行數

最后確定問題並采取相應的優化措施


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM