一茬祷、id:
代表select語句的編號清焕,如果是連接查詢,表之間是平等關(guān)系祭犯,select 編號都是從1開始秸妥,如果某select中有子查詢,則編號遞增沃粗;
二粥惧、select_type(查詢類型):
三、table(查詢針對的表):
1.實際的表名:select * from t1;
2.表的別名:select * from t2 as tmp;
3.derived:from型子查詢時
4.null:直接計算得結(jié)果,不用走表
四最盅、possible_key(可能用到的索引):
注意:系統(tǒng)估計可能用的幾個索引突雪,但最終只能用1個;
五涡贱、key(最終用的索引)
六咏删、key_len(使用的索引的最大字節(jié)數(shù))
注:不同的字符編碼有不同的計算方式,如1個utf8字符等于3個字節(jié)盼产;如果字段類型是null饵婆,那單個字段的索引字節(jié)數(shù)需要 +1,如果字段類型為非定長類型戏售,比如varchar,那字節(jié)數(shù)需要再 +2
七侨核、type(查詢的方式):
各個值代表查詢的效率比較:all < index < range < ref < eq_ref < const,system,null
注:這個列非常重要,是分析“查詢過程”的重要依據(jù)灌灾;
1.all:從表的第1行往后搓译,逐行做全表掃描,沒有使用索引
例:explain select name from table where name='xxx' \G
2.index:掃描所有索引節(jié)點锋喜,相當于index_all些己,有幾種情況會出現(xiàn)index:
(1).索引覆蓋的查詢情況下,能利用上索引嘿般,但是又必須全索引掃描
例:explain select id from table where id=1 or id+1>20\G
(2).利用索引來進行排序段标,但取出所有的節(jié)點
例:explain select id from table order by id asc \G
注:沒有加where條件,就得取所有索引節(jié)點炉奴,同時又沒有回行逼庞,只取索引節(jié)點,再排序瞻赶,經(jīng)過所有索引節(jié)點
3.range:查詢時赛糟,能根據(jù)索引做出一個范圍的掃描
例:explain select id,name from table where id>25 \G
4.ref:通過索引列派任,可以直接引用到某些數(shù)據(jù)行
例:explain select id,name from table where id=10 \G
5.eq_ref:通過索引列直接引用某一行數(shù)據(jù)(常見于連接查詢中)
例:explain select goods_id,shop_price from goods innert join ecs_catego ry using(cat_id) where goods_id> 25 \G
6.const,system,null:這3個分別指查詢優(yōu)化到常量級別,幾乎不需要查找時間
例1:explain select id,name from table wher eid=10 \G
例2:explain select 1+2 \G
注:一般按照主鍵來查詢時璧南,易出現(xiàn)const,system 掌逛,而直接查詢某個表達式或者不經(jīng)過表時,會出現(xiàn)NULL
7.index_merge:MySQL 5.0 和之后的版本推出了一個新特性---索引合并優(yōu)化(Index merge optimization)司倚,它讓MySQL可以在查詢中對一個表使用多個索引,對它們同時掃描豆混,并且合并結(jié)果。
例1:explain select * from table where id = 1 or uid = 10 \G
例2:explainselect*fromtablewhere (id= 1 or id = 2) oruid= 3 \G
八动知、ref(連接查詢表之間的字段引用關(guān)系):
例:explain select goods_id,cat_name,goods_name from ?goods inner join ec_category using(cat_id) where ecs_category.cat_name='' \G
九崖叫、rows(估計掃描總行數(shù))
十、extra(額外參數(shù)):
1.index:是指用到了索引覆蓋拍柒,效率非常高
2.using where:是指光靠索引定位不了心傀,還得where判斷
3.using temporary:是指用上了臨時表,group by 與order by 不同列時拆讯,或者group by ,order by 別的表的列
4.using filesort:文件排序(文件可能在磁盤,也可能在內(nèi)存)
例:select sum(shop_price) from ?goods group by cat_id;
注:這句sql用到了臨時表和文件排序