利用EXPLAIN分析sql語句的效能

2021-08-07 13:11:01 字數 1416 閱讀 6784

使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是如何處理你的sql語句,可以幫助選擇更好的索引和寫出更優化的查詢語句。。

explain 的每個輸出行包括下面的列:

select查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序。有三種情況:

select語句的查詢型別,主要是用於區分普通查詢、聯合查詢、子查詢等複雜查詢。有六種情況:

顯示這一行的資料是關於哪張表的。

顯示查詢使用了何種型別,從最好到最差依次是:system>const>eq_ref>ref>rang>index>all。

注:一般來說,保證查詢至少達到rang級別,最好能達到ref。

顯示可能應用在這張表中的索引,乙個或多個。查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢實際使用。

實際使用的索引。如果為null,則沒有使用索引。查詢中若使用了覆蓋索引,則該索引和查詢的select欄位重疊。

覆蓋索引:查詢的字段剛好與索引符合,就是select的資料列只用從索引中就能取得,不必讀取資料行。

表示索引中使用的位元組數,可以通過該列計算查詢中使用的索引長度。在不損失精確性的情況下,長度越短越好。key_len顯示的值為索引欄位的最大可能長度,並非實際使用長度,即key_len是根據表定義計算而得,不是通過表內檢索出的。

顯示索引的哪一列被使用了,如果可能的話,是乙個常數。哪些列或常量被用於查詢索引列上的值。

根據表統計資訊及索引選用情況,大致估計出找到所需的記錄所需要讀取的行數。

包含不適合在其他列中顯示的額外資訊。

上面sql的執行順序:

select_type為union,說明第四個select也就是是union裡的的第二個select,最先執行(select name, id from t2)。

id為3,是整個查詢中第三個select的一部分。因查詢包含在from中,所以為derived(select id, name from t1 where other_column=」)。

select列表中的子查詢select_type為subquery,為整個查詢中的第二個select(select id from t3)。

id為1,表示union裡的第乙個select,select_type列的primary表示該查詢為外層查詢,table列被標記為< derived3 >,表示查詢結果來自乙個衍生表,其中dervied3中3代表該查詢衍生自第三個select查詢,即id為3的select(select d1.name……)。

代表從union的臨時表中讀取的階段,table列的< union 1, 4 >表示用第乙個和第四個select的結果進行union操作。

EXPLAIN分析SQL語句

使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是如何處理你的sql語句,可以幫助選擇更好的索引和寫出更優化的查詢語句。explain 的每個輸出行包括下面的列 select查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序。有三種情況 select...

EXPLAIN分析SQL語句

explain顯示了mysql如何使用索引來處理select語句以及連線表。使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是如何處理你的sql語句的,繼而可以幫助選擇更好的索引和寫出更優化的查詢語句。explain select的sql語句 上圖顯示了explain的結...

MySQL使用EXPLAIN分析SQL

explain 關鍵字詳解 使用explain 關鍵字可以模擬優化器執行sql 查詢語句,從而知道mysql資料庫是如何處理你的sql 語句的。因此我們可以使用該關鍵字知道我們編寫的sql 語句是否是高效的,從而可以提高我們程式猿編寫sql 的能力。使用explain 關鍵字可以讓我們知道表的讀取順...