解釋器的結果通常通過上述表格展示:
1. select_type 表示查詢的類型
simple: 表示簡單的選擇查詢,沒有子查詢或連接操作
primary:表示主查詢,通常是最外層的查詢
subquery :表示子查詢,在主查詢中嵌套的查詢
derived: 表示派生查詢,用于創建臨時表或視圖
UNION_RESULT:表示?UNION
?操作的結果集。
DEPENDENT SUBQUERY:表示依賴于外部查詢的子查詢。
UNCACHEABLE SUBQUERY:表示無法被緩存的子查詢。
COMPLEX SUBQUERY:表示復雜的子查詢,可能包含多個子查詢或其他復雜的結構。
2.table
?字段表示查詢中涉及的表名
3.partitions
字段表示使用的分區數。如果查詢涉及到分區表,該字段將顯示使用的分區數。對于大型表,全表掃描的效率較低,應盡可能使用索引。通過該字段,用戶可以了解查詢是否最優地利用了分區。
4.type 表示連接操作的類型,它提供了有關表之間的操作
all:表示全表掃描
index:表示索引進行連接。(當查詢中涉及到有索引的字段,多個條件中其中有1個或幾個涉及到索引字段,則使用index)
range:表示使用范圍掃描進行連接
ref:表示使用引用完整性進行連接(查詢條件即為索引字段,則使用ref)
eq_ref:表示通過主鍵或唯一索引進行連接
const:表示常量連接,通常用于連接條件中使用常量值的情況
5.possible_keys 代表查詢可能用到的索引,如果查詢沒有用到預期的索引,可能需要進一步分析查詢語句和表語句
6. key 表示mysql 執行查詢時,最終使用的索引。
7.key_len 表示查詢中使用到索引的長度。長度越短,說明索引越高效。索引的長度通常跟字段的長度一致。
8.ref
字段主要用于表示索引的引用類型。
9.rows 表示SQL 執行過程中掃描的行數
10.filtered 執行查詢過濾后的行數所占的比例,范圍0-100,滿足條件的行數與總行數之間的比例,越小越好。如果為100.表示沒有篩選
11.extra 提供有關查詢計劃外的額外信息。use where 表示通過索引訪問后,需要再回表訪問所需要的數據。過濾條件發生在server層而不是存儲引擎層。如果執行計劃走了索引,但rows 很高,那么執行效果不會好。索引訪問的成本主要在回表上,可以用覆蓋索引來優化。using index condition 表示系統對訪問表數據進行了優化。
覆蓋索引是指一個索引包含了查詢所需的所有列,因此查詢可以直接從索引中獲取數據,而不必去訪問數據表。當查詢的數據量較大時,覆蓋索引可以極大地提高查詢性能,因為不必訪問數據表,從而減少了磁盤 I/O 操作和 CPU 開銷。