EXPLAIN分析SQL語句

2021-10-06 06:06:47 字數 2473 閱讀 8031

explain顯示了mysql如何使用索引來處理select語句以及連線表。使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是如何處理你的sql語句的,繼而可以幫助選擇更好的索引和寫出更優化的查詢語句。

explain + select的sql語句

上圖顯示了explain的結果集,接下來我們一步步了解每個字段代表的含義。

id表示讀取順序。id越大,越先被讀取;相同id時,由上至下讀取。

select_type顯示查詢型別,常見查詢型別如下:

select_type

含義******

簡單查詢(不包含子查詢和聯合查詢)

primary

複雜查詢中最外層的查詢

union

聯合查詢中的第二個或者後面的查詢

union result

聯合查詢的結果

subquery

在select或者where列表中包含了子查詢

derived

衍生表查詢(跟在from後的子查詢)

table顯示表名

partitions記錄與查詢匹配的分割槽

type顯示掃瞄型別,常見訪問型別如下,從上到下,效能由好到壞:

type

含義system  

表只有一行記錄

const

索引匹配常量時,const用於比較primary key或者unique索引

eq_ref

唯一性索引掃瞄,對於每個索引鍵,表中只有一條記錄與之匹配。常見於主鍵或唯一索引掃瞄

ref非唯一性索引掃瞄,返回匹配某個單獨值的所有行

range

通過索引檢索給定範圍的行,一般就是在你的where語句**現了between、、in等的查詢

index

通過索引全掃瞄

all全表掃瞄

possible_keys顯示可能應用在這張表中的索引,乙個或多個。查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢實際使用。

key顯示實際使用的索引。如果為null,則沒有使用索引。

key_len顯示索引中使用的位元組數, 該欄位可以檢查是否充分的利用上了復合索引,可通過該列計算查詢中使用的索引的長度。

varchar和char的區別:char是固定長度字串,varchar是可變長度字串,varchar的原理是用前兩位位元組記錄varchar所需位元組數達到可變長度的目的。

以下編碼預設utf-8(utf-8編碼位元組數為3)

字段公式

key_len

id int

4+1(null)

5id int not null

4+1(null)

4name char(20)

n * 3 + 1(null)

61name char(20) not null

n * 3 + 1(null)

60name varchar(20)

n * 3 + 2 + 1(null)

63name varchar(20) not null

n * 3 + 2 + 1(null)      

62ref顯示索引的哪一列被使用了,如果可能的話,是乙個常數。哪些列或常量被用於查詢索引列上的值

rows顯示mysql認為它執行查詢時必須檢查的行數。

fillered顯示儲存引擎返回的資料在server層過濾後,剩下多少滿足查詢的記錄數量的比例(百分比)

包含不適合在其他列中顯示但十分重要的額外資訊,常用資訊如下

extra

含義using filesort

說明mysql會對資料使用乙個外部的索引排序,而不是按照表內的索引順序進行讀取。mysql中無法利用索引完成的排序操作稱為「檔案排序」

using temporary

使了用臨時表儲存中間結果,mysql在對查詢結果排序時使用臨時表。常見於排序 order by 和分組查詢 group by

using index

表示相應的select操作中使用了覆蓋索引(covering index),避免訪問了表的資料行,效率不錯!如果同時出現using where,表明索引被用來執行索引鍵值的查詢;如果沒有同時出現using where,表明索引只是用來讀取資料而非利用索引執行查詢。

using where

表明使用了where過濾

using join buffer

使用了連線快取

impossible where

where子句的值總是false,不能用來獲取任何元組

select tables optimized away

在沒有groupby子句的情況下,基於索引優化min/max操作或者對於myisam儲存引擎優化count(*)操作,不必等到執行階段再進行計算,查詢執行計畫生成的階段即完成優化。

EXPLAIN分析SQL語句

使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是如何處理你的sql語句,可以幫助選擇更好的索引和寫出更優化的查詢語句。explain 的每個輸出行包括下面的列 select查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序。有三種情況 select...

Explain分析sql語句執行效率

使用explain命令會有以下屬性輸出 1 id 這是select的查詢序列號 2 select type select type就是select的型別 1.簡單select 不使用union或者子查詢等 2.primsry union中的第二個或後面的select語句 3.dependent un...

explain分析sql語句執行效率

explain命令在解決資料庫效能上是第一推薦使用命令,大部分的效能問題可以通過此命令來簡單的解決,explain可以用來檢視sql語句的執行效 果,可以幫助選擇更好的索引和優化查詢語句,寫出更好的優化語句。explain語法 explain select from where 例如 explain...