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

來源:互聯網
上載者:User

標籤:訪問   多個   範圍   opera   tar   轉換   img   順序   匹配   

很多朋友在用mysql進行調優的時候都肯定會用到explain來看select語句的執行情況,這裡簡單介紹結果中兩個列的含義。

1 type列官方的說法,說這列表示的是“訪問類型”,更通俗一點就是:mysql找到需要的資料行的方式。一下就是從效率最差到最好順序分別介紹下:All 這個就是所謂的全表掃描,沒有用到任何的index,mysql就是從頭到尾把整個表遍曆一邊,找到所需要的資料行。效率是最差的。如,這個表中的usertype不是索引,這個查詢中沒有用到任何索引,所以就出現了全表掃描的結果。

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

range 這個一般就是在你的where語句中出現了between或者“>”這種符號的時候會出現這個。這種範圍掃描索引掃描比全表掃描要好,因為它只需要開始於索引的某一點,而結束語另一點,不用掃描全部索引。ref 這也是一種索引訪問,它返回所有匹配某個單獨值的行,然而,它可能會找到多個合格行,所以他應該屬於尋找和掃描的混合體。const,system 當mysql能對查詢的部分就行最佳化,並且轉換成一個常量的時候,它就會使用這種訪問類型了。比如你把一行的主鍵當做where條件放進去,那mysql就可以把它轉換成一個常量,然後查詢。如:uid是主鍵,作為where條件就能出現這個效率最高的查詢結果。

NULL是最好的,不用訪問索引或表,直接獲得資料。 2 extra列extra列中出現的資訊一般不是太重要,但是還是有很多資訊我們可以從這裡面擷取到:using index:出現這個說明mysql使用了覆蓋索引,避免訪問了表的資料行,效率不錯!using where:這說明伺服器在儲存引擎收到行後將進行過濾。有些where中的條件會有屬於索引的列,當它讀取使用索引的時候,就會被過濾,所以會出現有些where語句並沒有在extra列中出現using where這麼一個說明。using temporary:這意味著mysql對查詢結果進行排序的時候使用了一張暫存資料表。using filesort:這個說明mysql會對資料使用一個外部的索引排序,而不是按照表內的索引順序進行讀取。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.