explain包含id、select_type、table、type、possible_keys、key、key_len、ref、rows、extra欄位
id
id列的編號是select的序列號,有幾個select就有幾個id,并且id的順序是按select出現的順序增長的,
select_type
select_type表示對應行是簡單還是復雜的查詢, 1. simple:簡單查詢 2. primary:復雜查詢中最外層的select 3. subquery:包含在select中的子查詢(不在from子句中) 4. derived:包含在from子句中的子查詢 5. union:在union中的第二個和隨后的select 6. union result:從union臨時表檢索結果的select
table
這一串列示explain的一行正在訪問哪張表,
type
這一串列示關聯型別或訪問型別,即mysql決定如何查找表中的行 性能優先級依次從最優到最差分別為:system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>all 1.null:mysql能夠在優化階段分解查詢陳述句,在執行階段用不著再訪問表或索引, 2.const、system:mysql能對查詢的某部分進行優化并將其轉化成一個常量(可以看show warnings的結果), 3.eq_ref:primary key 或unique key索引的所有部分被連接使用,最多只會回傳一條符合條件的記錄, 4.ref:相比eq_ref,不實用唯一索引,而是使用普通索引或者唯一性索引的部分前綴,索引要喝某個值相比較,可能會找到符合條件的行, 5.ref_or_null:類似ref,但是可以搜索值為null的行, 6.index_merge:表示使用了索引合并的優化方法, 7.range:范圍掃描通常出現在in(),between,>,<,>=等操作中, 8.index:和all一樣,不同就是mysql只需掃描索引樹,這通常比all快一些, 9.all:全表掃描,意味著mysql需要從頭到尾去查找所需要的行,通常情況下這需要增加索引來進行優化了,
possible_keys
這一列顯示查詢可能使用哪些索引來查找
key
這一列顯示mysql實際采用哪個索引來優化對該表的訪問
key_len
這一列顯示了mysql在索引里使用的位元組數,通過這個值可以算出具體使用了索引中的那些列
ref
在key列記錄的索引中,表查找值所用到的列或常量,常見的有:const,func,null,欄位名
rows
mysql估計要讀取并檢測的行數,注意這個不是結果集里的行數,
extra
展示的是額外資訊 1.distinct:一但mysql找到了與行相聯合和匹配的行,就不再搜索了, 2.using index:這發生在對表的請求列都是同一索引的部分的時候,回傳的列資料只使用了索引中的資訊,而沒有再去訪問表中的行記錄,(是性能高的表現) 3.using where:mysql服務器將在存盤引擎檢索行后再進行過濾,就是先讀取整行資料,再按where條件進行檢查,符合就留下,不符合就丟棄, 4.using temporary:mysql需要創建一張臨時表來處理查詢,出現這種情況一般是要進行優化的,首先是想到用索引來優化, 5.using filesort:mysql會對結果使用一個外部索引排序,而不是按索引次序從表里讀取行,此時mysql會根據聯接型別瀏覽所有符合條件的記錄,并保存排序關鍵字和行指標,然后排序關鍵字并按順序檢索行資訊,這種情況下一般也是要考慮使用索引來優化的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/270993.html
標籤:MySQL
