sql執行計畫:
id 用來看查詢了幾次,或者有幾個select。但是這個不一定準確,因為
select * from a inner join b on a.id=b.id;
這個語句有乙個select,但是實際上查詢了兩個表。因此還是要看查詢了幾張表(包括衍生表)
type: 這個字段用來描述本次查詢的效能高低,
all 效能最低(全表掃瞄),
index,從索引裡面取資料,效能僅僅比全表快一點而已,這個也算是用到索引了。但是用到索引並不一定效率高,因為index僅僅代表從索引裡面取資料,並沒有利用到索引的最大優勢,就是通過排序降低io次數。
range,使用到了索引,但是這個代表索引的範圍查詢。效能比前兩個肯定高,因為前兩個全表全索引沒有用到排序定位,這個用到了排序定位,至少能過濾掉更多資料。select * from a where c1=1 c2>2; 這個sql,首先找到c1=1 c2=2的值,然後在葉子節點處向右查詢資料。或者如果這個索引裡面還有c3 c4的話,那麼此時c1=1 c2=2並沒有定位到葉子節點處,但是沒關係,你已經通過這兩個字段過濾掉大部分資料了,後面只需要在過濾以後的資料裡面全部取出就可以了。
ref,這個是說通過索引取出的值可能不只乙個。什麼情況下通過索引的值不只乙個?當然是非唯一索引,或者聯合索引的字首部分。
這個地方有乙個細節,通過非唯一索引或聯合索引的字首取出的資料,如果只有一條,也是ref。mysql不管你取出多少資料,只有是你有可能取出多條,就是ref。
eq_ref,通過唯一索引取出資料,唯一索引那取出的肯定是唯一的資料了。另外通過聯合索引的全部字段取出的值不一定是這個級別,因為聯合索引可能不是唯一索引。除非你先定聯合索引是唯一的,那麼才是這個級別。
const,通過唯一索引取出的值,並且索引於常數比較,切記是於常數比較。兩個條件,乙個是唯一索引,乙個是常數。
system,表裡面只有一條記錄,這個基本達不到。
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執行計畫
id id列的編號是select的序號,有幾個select就有幾個id,並且id的順序是按select出現的順序增長的。id列越大執行優先順序越高,id相同則從上往下執行,id為null最後執行 select type 表示對應行是簡單還是複雜查詢 簡單查詢,查詢不包含子查詢和union prima...
MySQL 執行計畫EXPLAIN
mysql 提供了乙個 explain 命令,它可以對 select 語句進行分析,並輸出 select 執行的詳細資訊,以供開發人員針對性優化。使用explain這個命令來檢視乙個這些sql語句的執行計畫,檢視該sql語句有沒有使用上了索引,有沒有做全表掃瞄,這都可以通過explain命令來檢視。...