EXPLAIN命令檢視SQL執行計畫

2021-09-11 20:09:04 字數 1352 閱讀 6167

列名

說明id

select識別符,這是select的查詢序列號。

select_type

select型別,可以為以下任何一種:

table

輸出的行所引用的表

partitions

如果查詢是基於分割槽表的話,顯示查詢將訪問的分割槽。

type

聯接型別。下面給出各種聯接型別,按照從最佳型別到最壞型別進行排序:

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

possible_keys

指出mysql能使用哪個索引在該表中找到行

key顯示mysql實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是null。

key_len

顯示mysql決定使用的鍵長度。如果鍵是null,則長度為null。在不損失精確性的情況下,長度越短越好

ref顯示使用哪個列或常數與key一起從表中選擇行。

rows

顯示mysql認為它執行查詢時必須檢查的行數。多行之間的資料相乘可以估算要處理的行數。

filtered

顯示了通過條件過濾出的行數的百分比估計值。

extra

該列包含mysql解決查詢的詳細資訊

select tables optimized away mysql根本沒有遍歷表或索引就返回資料了,表示已經優化到不能再優化了

not exists:mysql能夠對查詢進行left join優化,發現1個匹配left join標準的行後,不再為前面的的行組合在該錶內檢查更多的行。

range checked for each record (index map: #):mysql沒有發現好的可以使用的索引,但發現如果來自前面的表的列值已知,可能部分索引可以使用。

using filesort:mysql需要額外的一次傳遞,以找出如何按排序順序檢索行,說明查詢就需要優化了。

using index:從只使用索引樹中的資訊而不需要進一步搜尋讀取實際的行來檢索表中的列資訊。

using temporary:為了解決查詢,mysql需要建立乙個臨時表來容納結果,說明查詢就需要優化了。

using where:where 子句用於限制哪乙個行匹配下乙個表或傳送到客戶。

using sort_union(...), using union(...), using intersect(...):這些函式說明如何為index_merge聯接型別合併索引掃瞄。

using index for group-by:類似於訪問表的using index方式,using index for group-by表示mysql發現了乙個索引,可以用來查 詢group by或distinct查詢的所有列,而不要額外搜尋硬碟訪問實際的表

Mysql之EXPLAIN命令檢視SQL執行計畫

root vm 0 5 centos mysqldumpslow a var log mariadb slow query log.txt reading mysql slow query log from var log mariadb slow query log.txt count 4 tim...

EXPLAIN檢視SQL執行計畫

參考 mysql王者晉級之路 如有錯誤的地方,請大家一定不吝指出,不勝感激。還有,不夠全面,以後隨著理解的深入我會不斷加內容的。我們寫完乙個sql語句,為了讓它高效能地執行,一定要explain一下,檢視一下它的執行計畫。檢視心法 1.首先從查詢型別type列開始檢視,如果出現all關鍵字,那麼不用...

SQL中EXPLAIN命令詳解

本文 explain裡面最關注以下幾列 type 本次查詢表聯接型別,從這裡可以看到本次查詢大概的效率 key最終選擇的索引,如果沒有索引的話,本次查詢效率通常很差 key len 本次查詢用於結果過濾的索引實際長度 rows 預計需要掃瞄的記錄數,預計需要掃瞄的記錄數越小越好 extra 額外附加...