select查詢的序列號,包含一組數字,表示查詢中執行select子句或者操作表的順序
id號分為三種情況:
1、如果id相同,那麼執行順序從上到下
id一樣(注意執行計畫的table列),left join 先掃瞄e表,再掃瞄d表;right join 先掃瞄d表,再掃瞄e表。
2、如果id不同,如果是子查詢,id的序號會遞增,id值越大優先順序越高,越先被執行
我們可以看到d表中select_type為 subquery 也就是子查詢的 意思),然後根據d表中的deptno去查詢 e表中的資料。
3、id相同和不同的,同時存在:相同的可以認為是一組,從上往下順序執行,在所有組中,id值越大,優先順序越高,越先執行
在這裡先從id為2的執行,如果id是一樣的,就按照上到下的順序執行;
type 連線型別分幾種情況:
效率從最好到最壞依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all
一般情況下,得保證查詢至少達到range級別,最好能達到ref 。
--range:表示利用索引查詢的時候限制了範圍,在指定範圍內進行查詢,這樣避免了index的全索引掃瞄,適用的操作符: =, <>, >, >=,
--index_subquery:利用索引來關聯子查詢,不再掃瞄全表
-unique_subquery:該連線型別類似與index_subquery,使用的是唯一索引
--ref:使用了非唯一性索引進行資料的查詢
--eq_ref :使用唯一性索引進行資料查詢
--index:全索引掃瞄這個比all的效率要好,主要有兩種情況,一種是當前的查詢時覆蓋索引,即我們需要的資料在索引中就可以索取,或者是使用了索引進行排序,這樣就避免資料的重排序。
《mysql學習》 explain執行計畫
參考 mysql執行計畫解讀 使用explain檢視,盡量優化sql使rows盡量小,因為查詢的時候會對資料行加鎖,所以rows越小代表鎖的行越少 id select type table type possible keys keykey len refrows extra 1 spall nul...
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 這個字段用來描述本次查詢的效能...