1. 程式人生 > >mysql explain字段意思解釋

mysql explain字段意思解釋

using mys 存儲 操作 情況 留下 查找表 列數 常見

mysql explain字段意思解釋

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會根據聯接類型瀏覽所有符合條件的記錄,並保存排序關鍵字和行指針,然後排序關鍵字並按順序檢索行信息。這種情況下一般也是要考慮使用索引來優化的。

mysql explain字段意思解釋