explain的參數:
1.key ------標識符
2. select_type -----查詢的類型
depednet subquery :子查詢中的第一個select依賴於外部的查詢
primary:
最外層的 select。
simple: 簡單的 select (沒有使用 union或子查詢)
dependent
union: union 語句中的第二個select,依賴於外部子查詢
subquery: 子查詢中的第一個 select
UNION
RESULT:UNION 中的合併結果。
3. table ------查詢引用的表
4. type -----表連接類型
system:表只有一行記錄(等於系統表)。這是 const表連接類型的一個特例。
const:表中最多隻有一行匹配的記錄,它在查詢一開始的時候就會被讀取出來。
eq_ref:從該表中會有一行記錄被讀取出來以和從前一個表中讀取出來的記錄做聯合。
ref:該表中所有符合檢索值的記錄都會被取出來和從上一個表中取出來的記錄作聯合。
ref_or_null: 這種連接類型類似 ref,不同的是mysql會在檢索的時候額外的搜索包含null 值的記錄
range: 只有在給定範圍的記錄纔會被取出來,利用索引來取得一條記錄。
index: 連接類型跟 all 一樣,不同的是它只掃描索引樹。
all: 將對該表做全部掃描以和從前一個表中取得的記錄作聯合。
5. possible_keys -------可能會被用到的索引
裏面所包含的索引可能在實際的使用中沒用到。如果這個字段的值是null,就表示沒有索引被用到。這種情況下,就可以檢查 where子
句中哪些字段那些字段適合增加索引以提高查詢的性能。
6. key ------mysql實際上要用的索引。
當沒有任何索引被用到的時候,這個字段的值就是null。想要讓mysql強行使用或者忽略在 possible_keys字段中的索引列表,可以在查
詢語句中使用關鍵字force
index, use index,或 ignore index。
7.
key_len ------ mysql使用索引的長度。
8.
ref ------ 哪些字段或者常量被用來和 key配合從表中查詢記錄出來。
9.
rows ------ mysql認爲在查詢中應該檢索的記錄數。
10. extr ------查詢中mysql的附加信息
distinct:mysql當找到當前記錄的匹配聯合結果的第一條記錄之後,就不再搜索其他記錄了。
not exists:mysql在查詢時做一個 left join優化時,當它在當前表中找到了和前一條記錄符合 left join條件後,就不再搜索更多的記錄
Impossible WHERE noticed after reading const tables:MySQL Query Optimizer 通過集到的統計信息判斷出不可能存在結果;
No tables:Query 語句中使用FROM DUAL 或者不包含任何FROM 子句;
Using filesort:當我們的Query 中包含ORDER BY 操作,而且無法利用索引完成排序操作的時候,MySQL Query Optimizer 不得不
選擇相應的排序算法來實現。
Using index:所需要的數據只需要在Index 即可全部獲得而不需要再到表中取數據;
Using index for group-by:數據訪問和Using index 一樣,所需數據只需要讀取索引即可,而當Query 中使用了GROUP BY 或者
DISTINCT 子句的時候,如果分組字段也在索引中,Extra 中的信息就會是Using index for group-by(鬆散索引掃描);
Using temporary:當MySQL 在某些操作中必須使用臨時表的時候,在Extra 信息中就會出現Using temporary 。主要常見於
GROUP BY 和ORDER BY 等操作中。
Using
where:如果我們不是讀取表的所有數據,或者不是僅僅通過索引就可以獲取所有需
要的數據,則會出現Using where 信息;
文章轉自:http://blog.csdn.net/z1988316/article/details/7980750