explain分析查詢

zping發表於2015-10-23

explain分析查詢

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

– 表的讀取順序

– 資料讀取操作的操作型別

– 哪些索引可以使用

– 哪些索引被實際使用

– 表之間的引用

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

EXPLAIN欄位:

ØTable:顯示這一行的資料是關於哪張表的

Øpossible_keys:顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從WHERE語句中選擇一個合適的語句

Økey:實際使用的索引。如果為NULL,則沒有使用索引。MYSQL很少會選擇優化不足的索引,此時可以在SELECT語句中使用USE INDEX(index)來強制使用一個索引或者用IGNORE INDEX(index)來強制忽略索引

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

Øref:顯示索引的哪一列被使用了,如果可能的話,是一個常數

Ørows:MySQL認為必須檢索的用來返回請求資料的行數

Øtype:這是最重要的欄位之一,顯示查詢使用了何種型別。從最好到最差的連線型別為system、const、eq_reg、ref、range、index和ALL

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

eq_ref:訪問索引,返回某單一行的資料.(通常在聯接時出現,查詢使用的索引為主鍵或惟一鍵)

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

range:這個連線型別使用索引返回一個範圍中的行,比如使用>或<查詢東西,並且該欄位上建有索引時發生的情況(注:不一定好於index)

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

ALL:全表掃描,應該儘量避免

Ø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):沒有好的索引.

相關文章