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


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

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

這里寫圖片描述

下面給出回顯的數據的含義:

(1)id:SELECT識別符,這是SELECT查詢序列號。

(2)select_type:select類型,它有以下幾種值

 1)simple 它表示簡單的select,沒有union和子查詢

 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、range、 index和ALL

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


(7)key: 實際使用的索引。如果為NULL,則沒有使用索引。很少的情況下,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上


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM