我們使用EXPLAIN解析SQL執行計劃時,如果有下面幾種情況,就需要特別關注下了:
首先看下?type?這列的結果,如果有類型是 ALL 時,表示預計會進行全表掃描(full table scan)。通常全表掃描的代價是比較大的,建議創建適當的索引,通過索引檢索避免全表掃描。此外,全索引掃描(full index scan)的代價有時候是比全表掃描還要高的,除非是基于InnoDB表的主鍵索引掃描。
再來看下?Extra?列的結果,如果有出現?Using temporary?或者?Using filesort?則要多加關注:
Using temporary,表示需要創建臨時表以滿足需求,通常是因為GROUP BY的列沒有索引,或者GROUP BY和ORDER BY的列不一樣,也需要創建臨時表,建議添加適當的索引。
Using filesort,表示無法利用索引完成排序,也有可能是因為多表連接時,排序字段不是驅動表中的字段,因此也沒辦法利用索引完成排序,建議添加適當的索引。
Using where,通常是因為全表掃描或全索引掃描時(type?列顯示為ALL?或?index),又加上了WHERE條件,建議添加適當的索引。
暫時想到上面幾個,如果有遺漏,以后再補充。
其他狀態例如:Using index、Using index condition、Using index for group-by 則都還好,不用緊張。
更多詳情請看官方文檔:[8.8.2 EXPLAIN Output Format](http://dev.mysql.com/doc/refman/5.6/en/explain-output.html#explain-join-types)
- 前言
- 為什么InnoDB表要建議用自增列做主鍵
- 線上環境到底要不要開啟query cache
- MySQL復制中slave延遲監控
- 如何安全地關閉MySQL實例
- 如何查看當前最新事務ID
- 從MyISAM轉到InnoDB需要注意什么
- 5.6版本GTID復制異常處理一例
- 不同的binlog_format會導致哪些SQL不會被記錄
- Spring框架中調用存儲過程失敗
- 如何將兩個表名對調
- mysqldump加-w參數備份
- 使用mysqldump備份時為什么要加上 -q 參數
- 修改my.cnf配置不生效
- 什么情況下會用到臨時表
- profiling中要關注哪些信息
- EXPLAIN結果中哪些信息要引起關注
- processlist中哪些狀態要引起關注
- MySQL無法啟動例一
- pt-table-checksum工具使用報錯一例
- 為什么要關閉query cache,如何關閉
- MySQL聯合索引是否支持不同排序規則
- SAVEPOINT語法錯誤一例
- 你所不知的table is full那些事
- 大數據量時如何部署MySQL Replication從庫
- 內存溢出案例