mysql explain 說明
總結學習一下mysql的explain 。innodb
| 列 | 說明 | |
|---|---|---|
| id | 就是每個sql的編號,有以下原則: 1.id越大,越優(yōu)先執(zhí)行。 2. id相同就從上往下執(zhí)行。 3. id為null最后執(zhí)行 |
|
| select_type | 對應的查詢類型(是簡單查詢還是復雜的聯(lián)合)。 simple:簡單查詢,不包含union和join。 primay:最外層的select subquery:包含再select 中的查詢 derived:包含再from的子查詢,就是一個臨時的結果表。 union:再union第二個跟著的select |
|
| table | 對應的行訪問那個表 | |
| type | 非常重要:代表對應的行關聯(lián)或者訪問的類型(就是訪問是索引樹還是常量等)。 NULL:在優(yōu)化階段就已經(jīng)得到了結果了,不需要再掃描索引了。比如:select min(id) from film; 【ID主鍵索引】 const、system:就是可以直接將查詢結果優(yōu)化成常量返回。system就是const的特例,就是只有1條結果的常量 eq_ref:直接關聯(lián)或者匹配主鍵索引 ref:不是主鍵索引,而是二級索引,需要回表(回溯主鍵索引拉取數(shù)據(jù)) range:查詢一個索引的范圍。 index:需要全表掃描索引獲取結果。就是不從B+樹的根節(jié)點查找,而是掃描某個二級索引的葉子節(jié)點掃描(因為二級索引小,而聚簇索引大,如果掃描聚簇索引那么消耗的內存比較多),然后得到的主鍵再回表帶出所有結果。 ALL:全表掃描,直接掃描聚簇索引葉子節(jié)點的數(shù)據(jù) |
|
| possible_key | 優(yōu)化階段mysql覺得可能走的key。具體的索引取決于執(zhí)行的時候 | |
| key | 執(zhí)行階段真正走的索引??梢灾苯邮褂胒orce_index強制走某個索引 | |
| key_len | 具體走了哪幾個索引。比如索引:【name_age】,那么使用這個長度就是name字段的字節(jié)數(shù)+age的字節(jié)數(shù)。這個一般用再聯(lián)合索引上,可以具體算出走了那幾個索引,進行繼續(xù)優(yōu)化 | |
| ref | 這一列顯示了在key列記錄的索引中,表查找值所用到的列或常量,常見的有:const(常量),字段名(例:film.id) | |
| rows | 預估掃描的行數(shù),不準確,僅供參考 | |
| Extra | 顯示額外的信息。 Using Index:使用了覆蓋索引。就是查詢的值可以直接從對應的索引中全部帶出【完美不需要優(yōu)化】 UsingWhere:使用where處理,并沒有走覆蓋索引???啥JB玩意,不懂【還可以,不需要優(yōu)化】 Using index condition:查詢的列不能完全被索引覆蓋。。Where前導列范圍??啥JB玩意,不懂【還可以,不需要優(yōu)化】 Using temporay:mysql 需要一個臨時的地方處理。【一般,需要優(yōu)化】 Using filesort:參與排序的數(shù)據(jù)量非常大,無法再內存中處理【差勁!需要優(yōu)化】 Select tables optimized away:使用某些聚合函數(shù)(如min、max)。來訪問索引再某個字段。 |