生活随笔 
收集整理的這篇文章主要介紹了
                                
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會對結果使用一個外部索引排序,而不是從表里按索引次序讀到相關內容??赡茉趦却婊蛘叽疟P上進行排序。MySQL中無法利用索引完成的排序操作稱為“文件排序” 
 
Using temporary 
表示MySQL在對查詢結果排序時使用臨時表。常見于排序order by和分組查詢 group by。 
 
 
                            總結 
                            
                                以上是生活随笔 為你收集整理的Explain 的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。