為什么要了解explain:
想了解select查詢的內部情況,查詢優化器是如何工作的,是否使用到了索引,explain可以做到。
MySQL查詢優化器是如何工作的?:
MySQL查詢優化器有幾個目標,但是其中最主要的目標是盡可能地使用索引,并且使用最嚴格的索引來消除盡可能多的數據行。最終目標是提交SELECT語句查找數據行,而不是排除數據行。優化器試圖排除數據行的原因在于它排除數據行的速度越快,那么找到與條件匹配的數據行也就越快。如果能夠首先進行最嚴格的測試,查詢就可以執行地更快。
一.explain共有十個屬性參數
二.EXPLAIN列的解釋:
1.id:選定的執行計劃中查詢的序列號。表示查詢中執行select子句或操作表的順序,id值越大優先級越高,越先被執行。id相同,執行順序由上至下。
2.select_type:查詢類型,說明:
3.table:顯示這一行的數據是關于哪張表的
4.type:這是重要的列,顯示連接使用了何種類型。
從最好到最差的連接類型為const、eq_reg、ref、range、index和ALL
5.possible_keys:顯示可能應用在這張表中的索引。如果為空,沒有可能的索引??梢詾橄嚓P的域從WHERE語句中選擇一個合適的語句
6.key:?實際使用的索引。如果為NULL,則沒有使用索引。很少的情況下,MYSQL會選擇優化不足的索引。這種情況下,可以在SELECT語句中使用USEINDEX(indexname)來強制使用一個索引或者用IGNORE INDEX(indexname)來強制MYSQL忽略索引
7.key_len:使用的索引的長度。在不損失精確性的情況下,長度越短越好
8.ref:顯示索引的哪一列被使用了,如果可能的話,是一個常數
9.rows:MYSQL認為必須檢查的用來返回請求數據的行數
10.Extra:關于MYSQL如何解析查詢的額外信息。這里可以看到的壞的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,結果是檢索會很慢,應該避免。
很顯然,當type是ALL,即最壞的情況。Extra里還出現了Using filesort,也是最壞的情況,優化是必須的。?
索引不是添加的越多越好的,在不同數量級的表中,是有取舍的,本身維護索引可能也會成為一種負擔,要會合理的添加索引。
用explain看看,你的語句該優化了嗎?
?以上就是Mysql分析-explain的詳細介紹的內容,更多相關內容請關注PHP中文網(www.php.cn)!