explain分析
EXPLAIN SELECT * FROM order WHERE id>2 AND order_sn<>''
結果:
說明:
- id:一組數字,操作順序,如果id相同,則執行的順序就由上至下,如果是子查詢,id的序號遞增,值越大優先級越高,越先被執行;
- select_type:表示每個字句的類型,簡單還是複雜,取值如下:
參數 |
描述 |
simple |
簡單查詢,無子查詢或union等 |
primary |
查詢中若包含複雜的子部分,最外層則被標記爲primary |
subquery |
在select或where中若包含子查詢,則該子查詢被標記爲subquery |
derived |
from中包含子查詢,被標記爲derived |
union |
若select出現在union之後,則被標記爲union |
union result |
從union表中獲取結果的select將被標記爲union result |
- table:查詢的數據庫表名稱
- type:聯合查詢使用的類型
參數 |
描述 |
all |
全表掃描 |
index |
全表掃描,只是掃描表的時候按照索引次序進行而不是行。主要優點就是避免了排序,但是開銷仍然非常大。 |
range |
索引範圍掃描。 |
ref |
非唯一索引掃描,較返回匹配單獨值的所有行,常見於使用非唯一性索引或唯一性索引的非唯一前綴進行的查找。 |
eq_ref |
唯一性索引掃描。 |
const、system |
當MySQL對查詢的某部分進行優化,並轉換爲一個常量時。如果將主鍵置於where列表中,MySQL就能將該查詢轉換爲一個常量。system時const的特列,當查詢的表只有一行的情況下,即可使用system。 |
- possible_keys:指出MySQL能使用哪個索引在表中找到行,查詢涉及的字段上若存在索引,則該索引將被列出。如果爲空,說明沒有可用的索引。
- key:使用到了哪個索引,這裏列出的是實際使用到的索引,若沒有使用索引,則顯示爲null。
- key_len:使用的索引的長度。在不損失精確性的情況下,長度越短越好。
- ref:顯示索引的哪一列被使用了。
- rows:MySQL認爲必須檢查的用來返回請求數據的行數。找到所需記錄,需要讀取的行數,越少越好。
- Extra:不適合在其他列顯示,但卻十分重要的信息,常見的有如下值:
取值 |
說明 |
Using index |
使用了索引檢索。 |
where used |
使用了where限制,但是用索引還不夠。 |
Using temporary |
需要使用臨時表來存儲結果集,常見於排序和分組查詢。性能差。 |
Using filesoft |
使用了文件排序,性能差。 |