explain執行計畫簡析

2021-10-06 08:58:45 字數 1347 閱讀 1452

訪問型別,sql查詢優化中乙個很重要的指標,結果值從好到壞依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all

一般來說,好的sql查詢至少達到range級別,最好能達到ref

1、system:表只有一行記錄(等於系統表),這是const型別的特例,平時不會出現,可以忽略不計

2、const:表示通過索引一次就找到了,const用於比較primary key 或者 unique索引。因為只需匹配一行資料,所有很快。如果將主鍵置於where列表中,mysql就能將該查詢轉換為乙個const 

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

注意:all全表掃瞄的表記錄最少的表如t1表

4、ref:非唯一性索引掃瞄,返回匹配某個單獨值的所有行。本質是也是一種索引訪問,它返回所有匹配某個單獨值的行,然而他可能會找到多個符合條件的行,所以它應該屬於查詢和掃瞄的混合體 

5、range:只檢索給定範圍的行,使用乙個索引來選擇行。key列顯示使用了那個索引。一般就是在where語句**現了bettween、、in等的查詢。這種索引列上的範圍掃瞄比全索引掃瞄要好。只需要開始於某個點,結束於另乙個點,不用掃瞄全部索引 

6、index:full index scan,index與all區別為index型別只遍歷索引樹。這通常為all塊,因為索引檔案通常比資料檔案小。(index與all雖然都是讀全表,但index是從索引中讀取,而all是從硬碟讀取) 

7、all:full table scan,遍歷全表以找到匹配的行 

查詢涉及到的字段上存在索引,則該索引將被列出,但不一定被查詢實際使用

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

查詢中如果使用了覆蓋索引,則該索引僅出現在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 這個字段用來描述本次查詢的效能...

explain執行計畫

id id列的編號是select的序號,有幾個select就有幾個id,並且id的順序是按select出現的順序增長的。id列越大執行優先順序越高,id相同則從上往下執行,id為null最後執行 select type 表示對應行是簡單還是複雜查詢 簡單查詢,查詢不包含子查詢和union prima...