MySQL之Explain
?
目錄
?
Explain是什么
Explain能做什么
?Explain怎么用
?Explain名詞解釋
Explain是什么
使用EXPLAIN關鍵字可以模擬優化器執行SQL查詢語句,從而知道MySQL是如何處理你的SQL語句的。分析你的查詢語句或是表結構的性能瓶頸。
Explain能做什么
- 表的讀取順序
- 哪些索引可以使用
- 數據讀取操作的操作類型
- 哪些索引被實際使用
- 表之間的引用
- 每張表有多少行被物理查詢
?Explain怎么用
Explain + SQL語句
?Explain名詞解釋
id
select查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序;id號每個號碼,表示一趟獨立的查詢。一個sql 的查詢趟數越少越好。?
- id相同,執行順序由上至下。 id相同,執行順序由上至下
- id不同,如果是子查詢,id的序號會遞增,id值越大優先級越高,越先被執行。 id不同,如果是子查詢,id的序號會遞增,id值越大優先級越高,越先被執行
- id相同不同,同時存在 id相同不同,同時存在 id如果相同,可以認為是一組,從上往下順序執行;在所有組中,id值越大,優先級越高,越先執行;衍生 = DERIVED。
select_type?
查詢的類型,主要是用于區別普通查詢、聯合查詢、子查詢等的復雜查詢。
table
顯示這一行的數據是關于哪張表的
partitions
代表分區表中的命中情況,非分區表,該項為null
type
type顯示的是訪問類型,是較為重要的一個指標,結果值從最好到最壞依次是:?
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL?
system>const>eq_ref>ref>range>index>ALL
一般來說,得保證查詢至少達到range級別,最好能達到ref。
如將主鍵置于where列表中,MySQL就能將該查詢轉換為一個常量。
?
它可能會找到多個符合條件的行,所以他應該屬于查找和掃描的混合體。
備注:一般來說,得保證查詢至少達到range級別,最好能達到ref。
?possible_keys
顯示可能應用在這張表中的索引,一個或多個。
查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢實際使用。
?key
實際使用的索引。如果為NULL,則沒有使用索引。
查詢中若使用了覆蓋索引,則該索引和查詢的select字段重疊
key_len?
表示索引中使用的字節數,可通過該列計算查詢中使用的索引的長度。?
key_len字段能夠幫你檢查是否充分的利用上了索引。
ref?
顯示索引的哪一列被使用了,如果可能的話,是一個常數。哪些列或常量被用于查找索引列上的值。
ref示例?
rows?
rows列顯示MySQL認為它執行查詢時必須檢查的行數。
越少越好。?
filtered?
這個字段表示存儲引擎返回的數據在server層過濾后,剩下多少滿足查詢的記錄數量的比例,注意是百分比,不是具體記錄數。?
?Extra
包含不適合在其他列中顯示但十分重要的額外信息。?
?
參考:http://www.atguigu.com/download_detail.shtml?v=30#player
總結
以上是生活随笔為你收集整理的MySQL之Explain的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: amoeba-mysql主从复制配置
- 下一篇: linux cmake编译源码,linu