1. 程式人生 > 其它 >MySQL 8 查詢優化新工具 Explain Analyze

MySQL 8 查詢優化新工具 Explain Analyze

1. Explain Analyze 介紹

Explain是我們常用的查詢分析工具,可以對查詢語句的執行方式進行評估,給出很多有用的線索。

但他僅僅是評估,不是實際的執行情況,比如結果中的rows,可能和實際結果相差甚大。

Explain AnalyzeMySQL 8中提供的新工具,牛X之處在於可以給出實際執行情況

Explain Analyze是一個查詢效能分析工具,可以詳細的顯示出 查詢語句執行過程中,都在哪兒花費了多少時間。

Explain Analyze 會做出查詢計劃,並且會實際執行,以測量出查詢計劃中各個關鍵點的實際指標,例如耗時、條數,最後詳細的打印出來。

2. 實踐效果

例如有如下一條查詢語句:

SELECT first_name, last_name, SUM(amount) AS total
FROM staff INNER JOIN payment
  ON staff.staff_id = payment.staff_id
     AND
     payment_date LIKE '2005-08%'
GROUP BY first_name, last_name;

現在對它執行Explain Analyze,只需要新增在 SELECT 前邊就行了:

EXPLAIN ANALYZE
SELECT first_name, last_name, SUM(amount) AS total
FROM staff INNER JOIN payment
  ON staff.staff_id = payment.staff_id
     AND
     payment_date LIKE '2005-08%'
GROUP BY first_name, last_name;

執行結果:

結果中包含了各個執行步驟的詳細情況,內容比較多,圖片中不方便看,下面咱就拿出其中一條看一下:

Filter: (payment.payment_date like '2005-08%')  
(cost=117.43 rows=894) 
(actual time=0.454..194.045 rows=2844 loops=2)

Filter表示這是執行過濾的一個步驟。

(payment.payment_date like '2005-08%')  

這部分是過濾條件。

(cost=117.43 rows=894)

這部分是估算的結果,預計需要花費的時間,和返回的記錄條數。

這就是在真正執行之前,查詢優化器所做的估算。

(actual time=0.454..194.045 rows=2844 loops=2)

這部分就是實際執行的結果資料了。

time的結果中分為2個部分,前面的0.454是返回第一條記錄的耗時,後面的194.045是返回所有記錄的耗時。

rows就是實際返回的準確記錄條數。

loops是當前過濾迭代器所執行的迴圈的數量。