數據庫 explain分析查詢

轉載自:http://www.cnblogs.com/zping/p/4904732.html

 

 

explain 分析查詢

 

使用explain 關鍵字可以模擬優化執行SQL查詢語句,從而知道MySQL是如何處理你的SQL語句的。這可以幫你分析你的查詢語句或是表結構的性能瓶頸。

 

通過explain命令可以得到:

---表的讀取順序

---數據讀取操作的操作類型

---那些索引可以使用

---那些索引被實際使用

---表之間的引用

---每張表有多少行被優化器查詢

 

 

 

explain字段

(1) table 顯示這一行數據是關於那張表的

(2)possible_keys 顯示可能應用在這張表中的索引。如果爲空,沒有可能的索引。可以爲相關的域從where語句中選擇一個合適的語句

(3)key 實際使用的索引。如果爲null,則沒有使用索引。MySQL很少會選擇優化不足的索引,此時可以在select語句中使用use index(indexname) 來強制使用一個索引或者用ignore index(indexname)來強制忽略索引。

(4)key_len 使用的索引的長度。在不損失精確性的情況下,長度越短越好。

(5)ref 顯示索引的那一列被使用了,如果可能的話,是一個常數

(6)rows MySQL認爲必須檢索的用來返回請求數據的行數

(7)type 這是最重要的字段之一,顯示查詢使用了何種類型。從最好到最差的連接類型爲system、const、eq_reg、ref、range、index和ALL

system、const:可以將查詢的變量轉爲常亮。如id=1;id爲主鍵或唯一鍵

eq_reg :訪問索引,返回某單一行的數據。(通常在聯結時出現,查詢使用的索引爲主鍵或唯一鍵)

ref:訪問索引,返回某個值的數據,(可以返回多行)通常使用=時發生

range:這個連接類型使用索引返回一個範圍中的行,比如使用>或<查找東西,並且該字段上建有索引時發生的情況(住:不一定好於index)

index:以索引的順序進行全表掃描,優點是不用排序,缺點是還要全表掃描

All:全表掃描,應儘量避免

(8)extra:關於MySQL如何解析查詢的額外信息,主要有以下幾種

using index:只用到索引,可以避免訪問表

using where:使用到where來過濾數據,不是所有的where clause都要顯示using where。如以=方式訪問索引。

using tmporary:用到臨時表

using filesort:用到額外的排序(當使用order by v1,而沒用到索引時,就會使用額外的排序)

range checked for eache record(index map:N):沒有好的索引

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章