生活随笔
收集整理的這篇文章主要介紹了
Explain
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
explain關鍵字
explain關鍵字一般放在SELECT查詢語句的前面,用于描述MySQL如何執行查詢操作、以及MySQL成功返回結果集需要執行的行數。explain 可以幫助我們分析 select 語句,讓我們知道查詢效率低下的原因,從而改進我們查詢,讓查詢優化器能夠更好的工作。
用法:
結果集說明如下:
id
MySQL Query Optimizer選定的執行計劃中查詢的序列號。表示查詢中執行select子句或操作表的順序,id值越大優先級越高,越先被執行。id相同,執行順序由上至下。
SIMPLE
簡單的select查詢,不使用union及子查詢。
PRIMARY
最外層的select查詢。
UNION
UNION 中的第二個或隨后的 select查詢,不依賴于外部查詢的結果集。
DEPENDENT UNION
UNION中的第二個或隨后的 select查詢,依 賴于外部查詢的結果集。
SUBQUERY
子查詢中的第一個select查詢,不依賴于外部查詢的結果集。
DEPENDENT SUBQUERY
子查詢中的第一個select查詢,依賴于外部查詢的結果集。
DERIVED
用于from子句里有子查詢的情況。MySQL會遞歸執行這些子查詢,把結果放在臨時表里。
UNCACHEABLE SUBQUERY
結果集不能被緩存的子查詢,必須重新為外層查詢的每一行進行評估。
UNCACHEABLE UNION
UNION中的第二個或隨后的select查詢,屬于不可緩存的子查詢。
system
表僅有一行(=系統表)。這是const連接類型的一個特例。
const
const用于用常數值比較PRIMARY KEY時。當查詢的表僅有一行時,使用System。
eq_ref
const用于用常數值比較PRIMARY KEY時。當查詢的表僅有一行時,使用System。
ref
連接不能基于關鍵字選擇單個行,可能查找到多個符合條件的行。叫做ref是因為索引要跟某個參考值相比較。這個參考值或者是一個常數,或者是來自一個表里的多表查詢的結果值
ref_or_null
如同ref, 但是MySQL必須在初次查找的結果里找出null條目,然后進行二次查找。
index_merge
說明索引合并優化被使用了。
unique_subquery
在某些IN查詢中使用此種類型,而不是常規的ref:value IN (SELECT primary_key FROM single_table WHERE some_expr)
index_subquery
在某些IN查詢中使用此種類型,與unique_subquery類似,但是查詢的是非唯一性索引:value IN(SELECT key_column FROM single_table WHERE some_expr)
range
只檢索給定范圍的行,使用一個索引來選擇行。key列顯示使用了哪個索引。當使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN或者IN操作符,用常量比較關鍵字列時,可以使用range。
index
全表掃描,只是掃描表的時候按照索引次序進行而不是行。主要優點就是避免了排序,但是開銷仍然非常大。
all
最壞的情況,從頭到尾全表掃描。
possible_keys
指出MySQL能在該表中使用哪些索引有助于查詢。如果為空,說明沒有可用的索引。
key
MySQL實際從possible_key選擇使用的索引。如果為NULL,則沒有使用索引。很少的情況下,MYSQL 會選擇優化不足的索引。這種情況下,可以在SELECT語句中使用USE INDEX (indexname)來強制使用一個索引或者用IGNORE INDEX(indexname)來強制MYSQL忽略索引
key_len
使用的索引的長度。在不損失精確性的情況下,長度越短越好。
rows
MYSQL認為必須檢查的用來返回請求數據的行數
extra 中出現以下2項意味著MYSQL根本不能使用索引,效率會受到重大影響。應盡可能對此進行優化。
Using filesort
表示MySQL會對結果使用一個外部索引排序,而不是從表里按索引次序讀到相關內容。可能在內存或者磁盤上進行排序。MySQL中無法利用索引完成的排序操作稱為“文件排序”
Using temporary
表示MySQL在對查詢結果排序時使用臨時表。常見于排序order by和分組查詢 group by。
總結
以上是生活随笔 為你收集整理的Explain 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。