Mysql Explain用法詳解

2021-10-07 12:09:26 字數 2726 閱讀 7954

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 byorder 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...