mysql explain中的type列含義和extra列的含義

不少朋友在用mysql進行調優的時候都確定會用到explain來看select語句的執行狀況,這裏簡單介紹結果中兩個列的含義。html

1 type列mysql

官方的說法,說這列表示的是「訪問類型」,更通俗一點就是:mysql找到須要的數據行的方式。一下就是從效率最差到最好順序分別介紹下:sql

All 這個就是所謂的全表掃描,沒有用到任何的index,mysql就是從頭至尾把整個表遍歷一邊,找到所須要的數據行。效率是最差的。以下圖,這個表中的usertype不是索引,這個查詢中沒有用到任何索引,因此就出現了全表掃描的結果。服務器

mysql <wbr>explain中的type列含義和extra列的含義

index type列中出現了index,含義僅僅是侷限在掃描全表的順序是按照索引順序掃描的,僅僅是按索引順序去掃描的。它的有點是避免了排序,由於索引就是已經排序好的,缺點就是要承擔按照索引次序讀取整張表的開銷。以下,這個查詢中order by id,id是這個表的索引,可是由於沒有在where中出現任何的索引列,因此它也只是索引順去掃描了全表。(這裏強調一下,你的查詢語句中where條件中沒有索引,只是order by 的時候用了index,並且沒有用limit限制,type這裏顯示的是all,也就是這種狀況下沒有limit,仍是掃面全表的)優化

mysql <wbr>explain中的type列含義和extra列的含義

range 這個通常就是在你的where語句中出現了between或者「>」這種符號的時候會出現這個。這種範圍掃描索引掃描比全表掃描要好,由於它只須要開始於索引的某一點,而結束語另外一點,不用掃描所有索引。ui

ref 這也是一種索引訪問,它返回全部匹配某個單獨值的行,然而,它可能會找到多個符合條件的行,因此他應該屬於查找和掃描的混合體。url

const,system 當mysql能對查詢的部分就行優化,而且轉換成一個常量的時候,它就會使用這種訪問類型了。好比你把一行的主鍵當作where條件放進去,那mysql就能夠把它轉換成一個常量,而後查詢。以下圖:uid是主鍵,做爲where條件就能出現這個效率最高的查詢結果。spa

mysql <wbr>explain中的type列含義和extra列的含義

2 extra列htm

extra列中出現的信息通常不是過重要,可是仍是有不少信息咱們能夠從這裏面獲取到:blog

using index:出現這個說明mysql使用了覆蓋索引,避免訪問了表的數據行,效率不錯!

using where:這說明服務器在存儲引擎收到行後將進行過濾。有些where中的條件會有屬於索引的列,當它讀取使用索引的時候,就會被過濾,因此會出現有些where語句並無在extra列中出現using where這麼一個說明。

using temporary:這意味着mysql對查詢結果進行排序的時候使用了一張臨時表。

using filesort:這個說明mysql會對數據使用一個外部的索引排序,而不是按照表內的索引順序進行讀取。

相關文章
相關標籤/搜索