4. explain-select_type(資料讀取操作的操作型別)
5. table
6. type
7. possible_keys和key
8. key_len
9. ref
10. rows
11. extra
使用方式:explain + sql語句
這裡的id不是主鍵,它是一組數字12345這種,表示我們進行表查詢的先後順序,其中id可以有三種情況:id相同,id不同,id同時相同和不同
看乙個demo:
這種情況下,根據explain中的table資訊從上而下執行
這個欄位的取值有以下幾種:
這六種型別的解釋如下:
這個就不用多解釋了,就是在explain顯示後的資料中表示這一行的資料來自哪張表
字面意思是訪問型別,它有8種值:
這8種型別從好到差的順序是:system>const>eq_ref>ref>range>index>all
,下面來解釋:
possible_keys:顯示可能應用在這張表種的索引,乙個或多個,但不一定被使用
key:實際使用的索引,如果為null,則沒有使用索引,若使用了覆蓋索引,則該索引僅出現在key列表種
覆蓋索引:
關於覆蓋索引更詳細的討論請看:mysql中最左原則和覆蓋索引的討論
表示索引中使用的位元組數,可通過該列計算查詢中使用的索引的長度,在不損失精度的情況下,長度越短越好
顯示和索引匹配的哪一列被使用了,展示的就是與索引列做等值匹配的條件,如常量或某個列
rows列顯示mysql認為它執行查詢時必須檢查的行數。注意這是乙個預估值,越少越好
extra是explain輸出中另外乙個很重要的列,該列顯示mysql在查詢過程中的一些詳細資訊,mysql查詢優化器執行查詢的過程中對查詢計畫的重要補充資訊。
型別說明
using filesort
說明mysql會對資料使用乙個外部的索引排序,而不是按照表內的索引順序進行讀取,mysql中無法利用索引完成的排序操作稱為」檔案排序「
using temporary
用臨時表儲存中間結果,常用於group by和order by操作中,一般看到它說明查詢需要優化了,就算避免不了臨時表的使用也要盡量避免硬碟臨時表的使用。
not exists
mysql優化了left join,一旦它找到了匹配left join標準的行, 就不再搜尋了。
using index
說明查詢是覆蓋了索引的,不需要讀取資料檔案,從索引樹(索引檔案)中即可獲得資訊。如果同時出現using where,表明索引被用來執行索引鍵值的查詢,沒有using where,表明索引用來讀取資料而非執行查詢動作。這是mysql服務層完成的,但無需再回表查詢記錄。
using index condition
這是mysql 5.6出來的新特性,叫做「索引條件推送」。簡單說一點就是mysql原來在索引上是不能執行如like這樣的操作的,但是現在可以了,這樣減少了不必要的io操作,但是只能用在二級索引上。
using where
using join buffer
使用了連線快取:block nested loop,連線演算法是塊巢狀迴圈連線;batched key access,連線演算法是批量索引連線
impossible where
where子句的值總是false,不能用來獲取任何元組
select tables optimized away
在沒有group by子句的情況下,基於索引優化min/max操作,或者對於myisam儲存引擎優化count(*)操作,不必等到執行階段再進行計算,查詢執行計畫生成的階段即完成優化。
distinct
優化distinct操作,在找到第一匹配的元組後即停止找同樣值的動作
附:
mysql explain 用法分析
explain select id 選擇識別符號 select type 表示查詢的型別。table 輸出結果集的表 partitions 匹配的分割槽 type 表示表的連線型別 possible keys 表示查詢時,可能使用的索引 key 表示實際使用的索引 key len 索引欄位的長度 r...
MySql explain用法及實踐
explain對我們優化sql語句是非常有幫助的。可以通過explain sql語句的方式分析當前sql語句。顯示這一行資料屬於哪張表,若在查詢中為select起了別名,則顯示別名。temp where id 11789 type 在表裡查到結果所用的方式。包括 效能有差 高 all index r...
mysql explain用法和結果的含義
詳細可參考 explain顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句。使用方法,在select語句前加上explain就可以了 如 explain select surname,first name form a,b where a.i...