為什麼要了解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#:顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從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)!