explain執行計畫分析

2021-10-06 13:28:23 字數 2234 閱讀 2791

1.explain通過分析執行計畫的結果來分析查詢語句或表結構的效能瓶頸。

(1)表讀取的順序

(2)資料讀取操作的操作型別

(3)可以使用索引

(4)實際使用索引

(5)表與表之間的引用資訊

(6)有多少行被查詢

2.執行計畫結果字段含義

(1)id

該欄位表示執行select子句或操作表的順序,分為三種情況:

id相同時,由上到下順序執行。

id不同,若為子查詢,id的序號會遞增,id值越大優先順序越高,越先被執行

id上述兩種情況同時存在時,執行分組,按上兩種情況執行;

(2)select_type

表示查詢型別,用於區分普通查詢、聯合查詢、子查詢等的複雜查詢。

****** 表示select簡單查詢,不包子查詢或者union

primary表示查詢中包含複雜子部分,最外層查詢被標記為primary

subquery表示select或where中含子查詢

derived表示from中含子查詢被標記為derived(衍生),遞迴執行子查詢,並把結果存在臨時表中

union表示union之後有第二個select出現,被標記為union:若union包含在from子句的子查詢中,外層select將被標記為:derived

union result表示從union表獲取結果的select

(3)table表示當前執行的表

(4)type

從優到差排序是:

system > const > eq_ref > ref > range > index > all
system 表示只有一行記錄,屬於const型別的特列,很少出現,可忽略;

const 表示通過索引一次找到,const用於比較primary key 或者unique索引。只匹配一行資料,所以很快。若主鍵位於where條件中,mysql就可以把該查詢轉換為乙個常量。

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

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

range 僅檢索指定範圍的行,key列顯示使用的索引,一般在where語句**現between、< 、>、in等的查詢,範圍掃瞄索引好於全表掃瞄要好。

index full index scan,index與all區別為index型別只遍歷索引樹。這通常比all快,因為索引檔案通常比資料檔案小。

注:all和index都是讀全表,index是從索引中讀取的,而all是從硬碟讀取的。

all full table scan 將遍歷全表以找到匹配的行

(5)possible_keys 和 key

possible_keys表示可能用到該錶的索引乙個或多個。但不一定使用。

key表示實際使用的索引,若為null,則沒有使用索引。

若使用覆蓋索引(select 後要查詢的字段剛好和建立的索引字段完全相同),則該索引僅出現在key列表中.

(6)key_len

表示索引中使用的位元組數,在不損失精確性下,長度越短越好。key_len值為索引欄位的最大可能長度,並非實際使用長度,key_len是根據表定義計算而得。

(7)ref表示索引的那些列被使用。

(8)rows表示大致估算需要讀取的行數,越少越好。

(9)extra(非常重要的額外資訊)

using filesort表示mysql使用外部的索引排序,而不是根據表內的索引順序進行讀取。mysql中無法利用索引完成的排序操作稱為「檔案排序」。

using temporary表示用了臨時表存中間結果,

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

using where表示使用了where過濾

using join buffer表示使用連線快取,例如查詢的時候join的次數比較多,則將配置檔案的緩衝區join buffer調大一些。

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

select tables optimized away表示在沒有group by子句的情況下,索引優化min/max操作或myisam儲存引擎優化count(*)操作,不必等到執行階段再進行計算,查詢執行計畫生成的階段即完成優化。

distinct表示找到第一匹配的元組後即停止找同樣值的動作。

Explain分析執行計畫

mysql將select查詢分為簡單查詢 和複雜查詢 primary 複雜查詢又分為三類 簡單子查詢 subquery 派生表 from語句中的子查詢,derived union查詢 union 例如 各屬性如下 還有ref列 這一列顯示了在key列記錄的索引中,表查詢值所用到的列或常量,常見的有 ...

EXPLAIN執行計畫

create table employee eid int auto increment,ename varchar 32 age int,salary float,mid int,primary key eid key ename,age create table manager mid int,...

explain執行計畫

sql執行計畫 id 用來看查詢了幾次,或者有幾個select。但是這個不一定準確,因為 select from a inner join b on a.id b.id 這個語句有乙個select,但是實際上查詢了兩個表。因此還是要看查詢了幾張表 包括衍生表 type 這個字段用來描述本次查詢的效能...