explain 引數含義

2021-06-12 23:09:54 字數 2667 閱讀 9566

select_type:所使用的查詢型別,主要有以下這幾種查詢型別。

(1)dependent subquery:子查詢內層的第乙個select,依賴於外部查詢的結果集。

(2)dependent union:子查詢中的union,且為union中從第二個select開始的後面所有select,同樣依賴於外部查詢的結果集。

(3)primary:子查詢中的最外層查詢,注意並不是主鍵查詢。

(4)******:除子查詢或union之外的其他查詢。

(5)subquery:子查詢內層查詢的第乙個select,結果不依賴於外部查詢結果集。

(6)uncacheable subquery:結果集無法快取的子查詢。

(7)union:union語句中第二個select開始後面的所有select,第乙個select為primary。

(8)union result:union 中的合併結果。

table:顯示這一步所訪問的資料庫中的表的名稱。

type:告訴我們對錶使用的訪問方式,主要包含如下集中型別。

(1)all:全表掃瞄。

(2)const:讀常量,最多隻會有一條記錄匹配,由於是常量,實際上只須要讀一次。

(3)eq_ref:最多隻會有一條匹配結果,一般是通過主鍵或唯一鍵索引來訪問。

(4)fulltext:進行全文索引檢索。

(5)index:全索引掃瞄。

(7)index_subquery:子查詢中的返回結果字段組合是乙個索引(或索引組合),但不是乙個主鍵或唯一索引。

(8)rang:索引範圍掃瞄。

(9)ref:join語句中被驅動表索引引用的查詢。

(10)ref_or_null:與ref的唯一區別就是在使用索引引用的查詢之外再增加乙個空值的查詢。

(11)system:系統表,表中只有一行資料。

(12)unique_subquery:子查詢中的返回結果字段組合是主鍵或唯一約束。

possible_keys:該查詢可以利用的索引。如果沒有任何索引可以使用,就會顯示成null,這項內容對優化索引時的調整非常重要。

key:mysql query optimizer 從 possible_keys 中所選擇使用的索引。

key_len:被選中使用索引的索引鍵長度。

ref:列出是通過常量(const),還是某個表的某個字段(如果是join)來過濾(通過key)的。

rows:mysql query optimizer 通過系統收集的統計資訊估算出來的結果集記錄條數。

extra:查詢中每一步實現的額外細節資訊,主要會是以下內容。

(1)distinct:查詢distinct 值,當mysql找到了第一條匹配的結果時,將停止該值的查詢,轉為後面其他值查詢。

(2)full scan on null key:子查詢中的一種優化方式,主要在遇到無法通過索引訪問null值的使用。

(3)impossible where noticed after reading const tables:mysql query optimizer 通過收集到的統計資訊判斷出不可能存在結果。

(4)no tables:query 語句中使用 from dual或不包含任何 from子句。

(5)not exists:在某些左連線中,mysql query optimizer通過改變原有 query 的組成而使用的優化方法,可以部分減少資料訪問次數。

(6)range checked for each record (index map: n):通過 mysql 官方手冊的描述,當 mysql query optimizer 沒有發現好的可以使用的索引時,如果發現前面表的列值已知,部分索引可以使用。對前面表的每個行組合,mysql檢查是否可以使用range或index_merge訪問方法來索取行。

(7)select tables optimized away:當我們使用某些聚合函式來訪問存在索引的某個欄位時,mysql query optimizer 會通過索引直接一次定位到所需的資料行完成整個查詢。當然,前提是在 query 中不能有 group by 操作。如使用min()或max()的時候。

(8)using filesort:當query 中包含 order by 操作,而且無法利用索引完成排序操作的時候,mysql query optimizer 不得不選擇相應的排序演算法來實現。

(9)using index:所需資料只需在 index 即可全部獲得,不須要再到表中取資料。

(10)using index for group-by:資料訪問和 using index 一樣,所需資料只須要讀取索引,當query 中使用group by或distinct 子句時,如果分組欄位也在索引中,extra中的資訊就會是 using index for group-by。

(11)using temporary:當 mysql 在某些操作中必須使用臨時表時,在 extra 資訊中就會出現using temporary 。主要常見於 group by 和 order by 等操作中。

(12)using where:如果不讀取表的所有資料,或不是僅僅通過索引就可以獲取所有需要的資料,則會出現 using where 資訊。

(13)using where with pushed condition:這是乙個僅僅在 ndbcluster儲存引擎中才會出現的資訊,而且還須要通過開啟 condition pushdown 優化功能才可能被使用。控制引數為 engine_condition_pushdown 。

explain各個屬性含義

查詢的序列號 查詢的型別,主要是區別普通查詢和聯合查詢 子查詢之類的複雜查詢 輸出的行所引用的表 訪問型別 從左至右,效能由差到好 表示查詢時可能使用的索引。如果是空的,沒有相關的索引。這時要提高效能,可通過檢驗where子句,看是否引用某些字段,或者檢查字段不是適合索引 顯示mysql實際決定使用...

explain用法和結果的含義

idselect識別符。這是select的查詢序列號 select typeselect型別,可以為以下任何一種 table輸出的行所引用的表 type聯接型別。下面給出各種聯接型別,按照從最佳型別到最壞型別進行排序 possible keys指出mysql能使用哪個索引在該表中找到行 key顯示m...

explain 命令引數詳解

id mysql query optimizer選定的執行計畫中查詢的序列號。select type 所使用的查詢型別,主要有以下這幾種查詢型別。dependent subquery 子查詢內層的第乙個select,依賴於外部查詢的結果集。dependent union 子查詢中的union,且為u...