MySQL查詢性能分析工具-explain關鍵字分析

explain顯示了mysql如何使用mysql來處理select語句以及連接表。可以幫助選擇更好的索引和寫出更優化的查詢語句。

explain的使用方法很簡單,只需要在select查詢語句前面加上explain關鍵字就行。下面給出一個實例:

MySQL查詢性能分析工具-explain關鍵字分析

下面給出回顯的數據的含義:
(1)id:SELECT識別符,這是SELECT查詢序列號。

(2)select_type:select類型,它有以下幾種值
? ? ? ?1)simple 它表示簡單的select,沒有mysql和子查詢

?2)primary?最外面的select,在有子查詢的語句中,最外面的select查詢就是primary。    ?3)union?union語句的第二個或者說是后面那一個.現執行一條語句。
explain?select?*?from?uchome_space?limit?10?union?select?*?from?uchome_space?limit?10,10

(4)table:顯示這一行的數據是關于哪張表的

(5)type:這是重要的列,顯示連接使用了何種類型。從最好到最差的連接類型為const、eq_reg、ref、mysql、 index和mysql

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

(7)key: 實際使用的索引。如果為mysql,則沒有使用索引。很少的情況下,MYSQL會選擇優化不足的索引。這種情況下,可以在SELECT語句中使用USE INDEX(indexname)來強制使用一個索引或者用IGNORE INDEX(indexname)來強制MYSQL忽略索引

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

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

(10)rows:MYSQL認為必須檢查的用來返回請求數據的行數。

(11)Extra:關于MYSQL如何解析查詢的額外信息。壞的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,結果是檢索會很慢

1)Distinct:一旦MYSQL找到了與行相聯合匹配的行,就不再搜索了    2)Not?exists:?MYsql優化了LEFT?JOIN,一旦它找到了匹配LEFT?JOIN標準的行,就不再搜索了    3)Range?checked?for?each?Record(index?map:#):沒有找到理想的索引,因此對于從前面表中來的每一個行組合,MYSQL檢查使用哪個索引,并用它來從表中返回行。  這是使用索引的最慢的連接之一    4)Using?filesort:?看到這個的時候,查詢就需要優化了。MYSQL需要進行額外的步驟來發現如何對返回的行排序。  它根據連接類型以及存儲排序鍵值和匹配條件的全部行的行指針來排序全部行    5)Using?index:?列數據是從僅僅使用了索引中的信息而沒有讀取實際的行動的表返回的,這發生在對表的全部的請求列都是同一個索引的部分的時候    6)Using?temporary?看到這個的時候,查詢需要優化了。這里,MYSQL需要創建一個臨時表來存儲結果,這通常發生在對不同的列集進行ORDER?BY上,而不是GROUP?BY上

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享