mysql 中 sql語句 explain(一)
來源:程序員人生 發布時間:2015-01-29 08:59:36 閱讀次數:4500次
參考:http://www.2cto.com/database/201307/230048.html
http://blog.csdn.net/zhuxineli/article/details/14455029
explain是用來分析mysql如何使用索引來處理select語句和連接表??梢詭椭x擇更好的索引和寫出更優化的查詢語句。
1. id
語句的履行順序標識。是指select語句履行的順序
2、select_type:
2.1、simple
簡單類型,只要 語句中沒有子查詢或union。
EXPLAIN SELECT * FROM `fm_company`
2.2 primary
最外面的select,在有子查詢的語句中,最外面的select查詢就是primary。查詢關鍵字和主鍵無關
EXPLAIN SELECT * FROM `fm_company` AS t1 WHERE orgId IN(SELECT orgId FROM fm_company AS t2 WHERE t2.`id` = 1)

2.3 union
union語句的后面那個 select 履行履行語句。
EXPLAIN SELECT * FROM `fm_company` AS t1
UNION
SELECT * FROM `fm_company` AS t2
2.4 dependent subquery
子查詢中內層中第1個select語句。
EXPLAIN SELECT * FROM `fm_company` AS t1 WHERE orgId IN(SELECT orgId FROM fm_company AS sub_t1 WHERE sub_t1.`id` = 148)
2.5、devived
派生表(中間表)的查詢語句
EXPLAIN SELECT * FROM (
SELECT * FROM `fm_company` AS t1
UNION
SELECT * FROM `fm_company` AS t2
) subQuery
2.6、dependent union
子查詢中union且為union中第2個select開始的后面所有select,依賴于外部的結果集。
EXPLAIN SELECT *
FROM `fm_company` as t1
WHERE orgId IN(
SELECT orgId FROM fm_company as sub_t1 WHERE sub_t1.`id` = 148
union
SELECT orgId FROM fm_company AS sub_t2 WHERE sub_t2.`id` = 149
)
2.7 union result
顧名思義就是 union中合并的結果
3. table
4. type
這列很重要,顯示了連接使用了哪一種種別,有沒有使用索引。type代表查詢履行計劃(QEP)中指定的表使用的連接方式。從最好到最差的連接類型為
4.1.system
system為const1個特例,即表中只有1條記錄。這個是及特殊的情況
4.2.const
const是在where條件以常量作為查詢條件,表中最多有1條記錄匹配。由因而常量,所以實際上只需要讀1次。
const用于比較primary key 或unique索引。由于只匹配1行數據,所以很快
記住1定是用到primary key 或unique,并且只檢索出兩條數據的 情況下才會是const。以下面這個sql。直接用主鍵id 查找
EXPLAIN SELECT * FROM fm_company WHERE id=148
4.3. eq_reg
最多只會有1條匹配結果,1般是通過主鍵或是唯1索引來訪問。1般會出現在連接查詢的語句中。
mysql手冊是這樣說的:"對每一個來自于前面的表的行組合,從該表中讀取1行。這多是最好的聯接類型,除const類型。它用在1個索引的所有部份被聯接使用并且索引是UNIQUE或PRIMARY
KEY"。eq_ref可以用于使用=比較帶索引的列
EXPLAIN SELECT * FROM fm_company t1 ,fm_company t2 WHERE t1.id=t2.id
后面有時間再研究吧。
4. ref、5. range、6.index、7. all
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈