explain顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句。
使用方法,在select語句前加上explain就可以了:
如:explain select surname,first_name form a,b where a.id=b.id
分析結果形式如下:
table
type
possible_keys
keykey_len
refrows
extra
arange
idfirst_name
first_name
null
using where
using temporary
using filesort
bref
idfirst_name
idid
using where
explain列的解釋:
table
顯示這一行的資料是關於哪張表的
type
這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為const、eq_reg、ref、range、indexhe和all
possible_keys
顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從where語句中選擇乙個合適的語句
key實際使用的索引。如果為null,則沒有使用索引。很少的情況下,mysql會選擇優化不足的索引。這種情況下,可以在select語句中使用use index(indexname)來強制使用乙個索引或者用ignore index(indexname)來強制mysql忽略索引
key_len
使用的索引的長度。在不損失精確性的情況下,長度越短越好
ref顯示索引的哪一列被使用了,如果可能的話,是乙個常數
rows
mysql認為必須檢查的用來返回請求資料的行數
extra
關於mysql如何解析查詢的額外資訊。將在表4.3中討論,但這裡可以看到的壞的例子是using temporary和using filesort,意思mysql根本不能使用索引,結果是檢索會很慢
extra列返回的描述的意義
distinct
一旦mysql找到了與行相聯合匹配的行,就不再搜尋了
not exists
mysql優化了left join,一旦它找到了匹配left join標準的行,
就不再搜尋了
range checked for each
record(index map:#)
沒有找到理想的索引,因此對於從前面表中來的每乙個
行組合,mysql檢查使用哪個索引,並用它來從表中返回行。
這是使用索引的最慢的連線之一
using filesort
看到這個的時候,查詢就需要優化了。mysql需要進行額外的步驟
來發現如何對返回的行排序。它根據連線型別以及儲存排序鍵值和
匹配條件的全部行的行指標來排序全部行
using index
列資料是從僅僅使用了索引中的資訊而沒有讀取實際的行動的表返回的,
這發生在對錶的全部的請求列都是同乙個索引的部分的時候
using temporary
看到這個的時候,查詢需要優化了。
這裡,mysql需要建立乙個臨時表來儲存結果,
這通常發生在對不同的列集進行order by上,而不是group by上
where used
使用了where從句來限制哪些行將與下一張表匹配或者是返回給使用者。
如果不想返回表中的全部行,並且連線型別all或index,這就會發生,
或者是查詢有問題
不同連線型別的解釋(按照效率高低的順序排序)
system
表只有一行:system表。這是const連線型別的特殊情況
const
表中的乙個記錄的最大值能夠匹配這個查詢(索引可以是主鍵或惟一索引)。因為只有一行,這個值實際就是常數,因為mysql先讀這個值然後把它當做常數來對待
eq_ref
在連線中,mysql在查詢時,從前面的表中,對每乙個記錄的聯合都從表中讀取乙個記錄,它在查詢使用了索引為主鍵或惟一鍵的全部時使用
ref這個連線型別只有在查詢使用了不是惟一或主鍵的鍵或者是這些型別的部分(比如,利用最左邊字首)時發生。對於之前的表的每乙個行聯合,全部記錄都將從表中讀出。這個型別嚴重依賴於根據索引匹配的記錄多少—越少越好
range
這個連線型別使用索引返回乙個範圍中的行,比如使用》或《查詢東西時發生的情況
index
這個連線型別對前面的表中的每乙個記錄聯合進行完全掃瞄(比all更好,因為索引一般小於表資料)
all這個連線型別對於前面的每乙個記錄聯合進行完全掃瞄,這一般比較糟糕,應該盡量避免
mysql explain使用方法
explain 顯示了 mysql 如何使用索引來處理 select 語句以及連線表。可以幫助選擇更好的索引 和寫出更優化的查詢語句。使用方法,在 select 語句前加上 explain 就可以了 如 explain select surname,first name form a,b where...
MySQL Explain的使用及各引數介紹
select type,查詢的型別 table,輸出 查詢 表的名稱 type,訪問方式 possible keys,可能使用的key 顯示可能使用的索引,沒有則為null,有的話可能是多個,但是不一定全部使用 key,實際使用的索引 key len,表示索引中所使用的位元組數,可通過該列計算查詢中...
mysql explain欄位說明
explain列的解釋 id 查詢的序列號 select type select查詢的型別,主要是區別普通查詢和聯合查詢 子查詢之類的複雜查詢。table 所訪問的資料庫中表的名稱。type 這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為const eq reg ref range ...