1. 程式人生 > 其它 >Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics)

Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics)

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過濾,效率較高