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