Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics)
阿新 • • 發佈:2022-03-15
mysql執行計劃
執行計劃:就是sql查詢的順序,以及如何使用索引查詢,返回的結果集的行數
EXPLAIN select * from user where username='neo'
-
id: 查詢的序號,有幾個select就顯示幾行,id時按照select出現的順序增長的,id列的值越大執行的優先順序越高
-
selectType:查詢中每個select子句的型別
- simple: 查詢中不包含子查詢和union查詢
- promary:此查詢是最外層查詢(包含子查詢)
- subquery:子查詢中的第一個select
- union:此查詢是union的第二或隨後的查詢
- dependent union:union中是第二個或後面的查詢語句,取決於外面的查詢
- union result: union的結果
- dependent subquery:子查詢中的第一個select, 取決於外面的查詢,即子查詢依賴於外層查詢的結果
- derived:衍生,匯出表的select
-
type:判斷索引有沒有命中,並且走的是哪一中索引。sql優化的重要欄位,是我們判斷sql效能和優化程度的重要指標。
-
system:表中只有一行記錄,比如系統表,一次命中
-
const:通過索引一次命中,匹配一行資料。效能高
-
eq_ref: 使用唯一索引,並命中,即表中只有一條資料與之匹配,效率高。可能會回表,因為不是主鍵。
-
ref: 使用非唯一索引掃描,命中多個匹配的結果,可能會回表
-
range:使用一個索引來檢索給定範圍的行,一幫用於between,<, >
-
index:遍歷索引樹,即遍歷所有索引,效率低
-
all: 全表掃描,效能差
執行效率:system > const > eq_ref > ref > range > index > all
-
-
table:查詢的表
-
partitions:有分割槽表的話,列印分割槽表的資訊
-
possible_keys: 可能會走的索引
-
key:真正走的索引名字
-
key_len:聯合欄位索引命中的長度
-
ref:命中索引的欄位名
-
rows:執行計劃的讀取的資料量,越少越優
-
filtered:過濾,百分比,返回資料佔讀取行數的比例,越高越好(讀取的資料更有意義)
-
extra:
- using_filesort: 結果集需要外部索引,無法通過索引排序的順序得到正確結果
- using_index:是覆蓋索引,覆蓋索引說明通過在索引樹總就可以查詢到所需要的資料,不需要回表掃描表資料檔案,說明效能較好
- using temporary: 是否有臨時表,如查詢時的多表join情況,說明檢索效率不高,建議優化
- using where: 使用where過濾,效率較高