explain關鍵字用法和結果分析

2021-10-06 01:47:29 字數 1264 閱讀 6620

1.什麼是explain

使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是如何處理你的sql語句。分析你的查詢語句或是表結構的效能瓶頸。 通過explain我們可以獲得以下資訊:

首先我們來舉例執行一下看下結果:

此處type不同,const

此處索引丟失,請見上篇文章:哪些情況下sql索引會失效

2.執行計畫各欄位含義

2.1 id

2.2 type

system > const > eq_ref > ref > range > index > all

2.3 possible_keys 和 key

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

key實際使用的索引,如果為null,則沒有使用索引。(可能原因包括沒有建立索引或索引失效) 

2.4 key_len

表示索引中使用的位元組數,可通過該列計算查詢中使用的索引的長度,在不損失精確性的情況下,長度越短越好。

2.5 rows

根據表統計資訊及索引選用情況,大致估算出找到所需的記錄所需要讀取的行數,也就是說,用的越少越好 

2.6 extra

2.6.1 using filesort

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

2.6.2 using temporary

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

2.6.3 using index

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

2.6.4 using join buffer

表明使用了連線快取,比如說在查詢的時候,多表join的次數非常多,那麼將配置檔案中的緩衝區的join buffer調大一些。

Explain關鍵字詳解

使用explain關鍵字可以模擬優化器執行sql語句,分析你的查詢語句或是結構的效能瓶頸 在 select 語句之前增加 explain 關鍵字,mysql 會在查詢上設定乙個標記,執行查詢會返回執行計畫的資訊,而不是執行這條sql 像這樣 create table actor id int pri...

mysql之explain關鍵字

1 用mysql儲存過程增加100萬條測試資料 儲存過程 建立儲存過程,資料庫名test,表名student create procedure myinst n int begin declare i int default0 set autocommit 0 repeat set i i 1 in...

MySQL 中 explain關鍵字

select 查詢的序列號,包含一組數字,表示查詢中執行 select 子句或操作表的順序。三種情況 id 相同 執行順序由上而下 from t1,t2,t3 where t1.id t2.id and t1.id t3.id and t1.other column from t2 where id...