explain詳細說明

2021-07-15 08:50:11 字數 2908 閱讀 6843

explain詳細說明

通過explain可以知道mysql是如何處理語句,分析出查詢或是表結構的效能瓶頸。通過expalin可以得到:

1. 表的讀取順序

2.表的讀取操作的操作型別

3.哪些索引可以使用

4. 哪些索引被實際使用

5.表之間的引用

6.每張表有多少行被優化器查詢

explain顯示字段

2. select_type:使用的查詢型別,主要有以下幾種查詢型別:

1).****** 簡單型別

語句中沒有子查詢或union

union是在select 語句中第二個select語句後面所有的select,第乙個select 為primary 

4).dependent subquery

子查詢中內層中第乙個select語句

子查詢中union且為union中第二個select開始的後面所有select,依賴於外部的結果集。

派生表的查詢語句

結果集無法快取的子查詢

9). union result 

union中合併的結果

顯示這一步所訪問的

資料庫中表的名稱

4. type 

這列很重要,顯示了連線使用了哪種類別,有無使用索引。type代表查詢執行計畫(qep)中指定的表使用的連線方式。從最好到最差的連線型別為 1.system、2.const、3. eq_reg、4. ref、5. range、6.index、7. all

1). system

system為const乙個特例,即表中只有一條記錄。

2). const

const是在where條件以常量作為查詢條件,表中最多有一條記錄匹配。由於是常量,所以實際上只需要讀一次。

最多隻會有一條匹配結果,一般是通過主鍵或是唯一索引來訪問。一般會出現在連線查詢的語句中。

join 語句中被驅動的表索引引用查詢。這個值表示所有具有匹配的索引值的行都被用到。

5).range

索引範圍掃瞄

6). index

全索引樹被掃瞄

7). all

全表掃瞄,效果是最不理想的。

5. possible_keys

查詢可以利用的索引,如果沒有任何索引可以使用,就會顯示成null,這項對內容的優化時索引的調整非常重要。

6.key

從possible_keys中所選擇使用的索引

7. key_len

key_len列顯示

mysql決定使用的鍵長度,如果鍵是null,則長度為null。使用的索引長度,一般越短越好。

8. ref 

列出的是通過常量const,或是某個表的某個欄位來過濾的。

9.rows

通過系統收集到的統計資訊,估計出來的結果集記錄條數

10. extra

extra:查詢中每一步實現的額外細節資訊,主要可能會是以下內容:

1). distinct:查詢distinct值,所以當mysql找到了第一條匹配的結果後,將停止該值的查詢而轉為後面其他值的查詢; fullscanonnullkey:子查

詢中的一種優化方式,主要在遇到無法通過索引訪問null值的使用使用;

2).  impossiblewherenoticedafterreadingconsttables:mysqlqueryoptimizer通過收集到的統計資訊判斷出不可能存在結果;

3). notables:query語句中使用fromdual或者不包含任何from子句;

4). notexists:在某些左連線中mysqlqueryoptimizer所通過改變原有query的組成而使用的優化方法,可以部分減少資料訪問次數;

5). rangecheckedforeachrecord(indexmap:n):通過mysql官方手冊的描述,當mysqlqueryoptimizer沒有發現好的可以使用的索引的時候,如果

發現如果來自前面的表的列值已知,可能部分索引可以使用。對前面的表的每個行組合,mysql檢查是否可以使用range或index_merge訪問方法來索取

行。 6). selecttablesoptimized away:當我們使用某些聚合函式來訪問存在索引的某個欄位的時候,mysqlqueryoptimizer會通過索引而直接一次定位到

所需的資料行完成整個查詢。當然,前提是在query中不能有groupby操作。如使用min()或者max()的時候;

7). usingfilesort:當我們的query中包含orderby操作,而且無法利用索引完成排序操作的時候,mysqlqueryoptimizer不得不選擇相應的排序演算法

來實現。

8).  usingindex:所需要的資料只需要在index即可全部獲得而不需要再到表中取資料;

9). usingindexforgroup-by:資料訪問和usingindex一樣,所需資料只需要讀取索引即可,而當query中使用了groupby或者distinct子句的時候,

如果分組欄位也在索引中,extra中的資訊就會是usingindexforgroup-by;

10). usingtemporary:當mysql在某些操作中必須使用臨時表的時候,在extra資訊中就會出現usingtemporary。主要常見於groupby和orderby等

操作中。

11). usingwhere:如果我們不是讀取表的所有資料,或者不是僅僅通過索引就可以獲取所有需要的資料,則會出現usingwhere資訊;

12). usingwherewithpushedcondition:這是乙個僅僅在ndbcluster儲存引擎中才會出現的資訊,而且還需要通過開啟conditionpushdown優化功能

才可能會被使用。控制引數為engine_condition_pushdown。

MySQL的explain詳細說明

explain顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句。使用方法,在select語句前加上explain就可以了 如 explain select surname,first name form a,b where a.id b.id...

Struts config xml 詳細說明

頁面中表單對應的bean儲存表單資料,驗證 type hello.helloform formbean 對應的包名.類名 路徑的邏輯名,此項必須有 path action1.do 指向 或重定向的uri.此項是必需的,必須以 開頭.請求訪問action的路徑,必須以 開頭 type hello.he...

Struts config xml 詳細說明

頁面中表單對應的bean儲存表單資料,驗證 type hello.helloform formbean 對應的包名.類名 name forward1 路徑的邏輯名,此項必須有 path action1.do 指向 或重定向的uri.此項是必需的,必須以 開頭.name forward2 path a...