MySQL 查詢計划 總結


(一)查詢計划 釋義

  查詢計划: SQL語句是怎樣進行執行的

  使用 EXPLAIN 關鍵字可以模擬優化器執行 SQL 查詢語句,從而知道 MySQL 是如何處理你的 SQL 語句的。分析你的查詢語句或是表結構的性能瓶頸。

 

  用法: Explain+SQL 語句。Explain 執行后返回的信息:

  

(二)具體字段解釋與demo

   1 id  :  select 查詢的序列號,包含一組數字,表示查詢中執行 select 子句或操作表的順序。

            id 相同,執行順序由上至下

            

  id 如果相同,可以認為是一組,從上往下順序執行;在所有組中,id 值越大,優先級越高,越先執行衍生 = DERIVED
  關注點:id 號每個號碼,表示一趟獨立的查詢。一個 sql 的查詢趟數越少越好。
 

  2 select_type  代表查詢的類型,主要是用於區別普通查詢、聯合查詢、子查詢等的復雜查詢 

SIMPLE      簡單的select 查詢,查詢中不包含子查詢或者union
PRIMARY   查詢中若包含任何復雜的子部分,最外層查詢則被標記為Primary
DERIVED 在FROM列表中包含的子查詢被標記為DERIVED(衍生) MYSQL會遞歸執行這些子查詢,把結果放在臨時表里
SUBQUERY 在select或where列表中包含了 子查詢
DEPEDENT SUBQUERY  在select或where列表中包含了 子查詢,子查詢基於外層
UNCACHEABLE SUBQUERY 無法使用緩存的子查詢
UNION  若第二個select 出現在UNION之后,則被標記為UNIONL 若UNION包含在from子句的子查詢中,外層select將被標記為:DERIVED
UNION RESULT  從UNION表獲取結果的SELECT

 

  3 table 

    這個數據是基於哪張表的。 

  4  type

    是查詢的訪問類型。是較為重要的一個指標,結果值從最好到最壞依次是

    system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index >ALL
       一般來說,得保證查詢至少達到 range 級別,最好能達到 ref。
system  表只有一行記錄(等於系統表),這是 const 類型的特列,平時不會出現,這個也可以忽略不計
const

 表示通過索引一次就找到了,const 用於比較 primary key 或者 unique 索引。因為只匹配一行數據,所以很快 如將主鍵置於 where 列表中,MySQL 就能將該查詢轉換為一個常量

eq_ref     唯一性索引掃描,對於每個索引鍵,表中只有一條記錄與之匹配。常見於主鍵或唯一索引掃描。
 ref            

 非唯一性索引掃描,返回匹配某個單獨值的所有行.本質上也是一種索引訪問,它返回所有匹配某個單獨值的行,然而,它可能會找到多個符合條件的行,所以他應該屬於查找和掃描的混合體。 

 range      只檢索給定范圍的行,使用一個索引來選擇行。key 列顯示使用了哪個索引一般就是在你的 where 語句中出現了 between、<、>、in 等的查詢這種范圍掃描索引掃描比全表掃描要好,因為它只需要開始於索引的某一點,而結束語另一點,不用掃描全部索引
 index    出現index是sql使用了索引但是沒用通過索引進行過濾,一般是使用了覆蓋索引或者是利用索引進行了排序分組
 all         Full Table Scan,將遍歷全表以找到匹配的行。

 

  

     5 possible_keys

    顯示可能應用在這張表中的索引,一個或多個。查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢實際使用。

  6 key

    實際使用的索引。如果為NULL,則沒有使用索引。

  7 key_len

         表示索引中使用的字節數,可通過該列計算查詢中使用的索引的長度。 key_len 字段能夠幫你檢查是否充分的利用上了索引。ken_len 越長,

    說明索引使用的越充分。

  8 ref

    顯示索引的哪一列被使用了,如果可能的話,是一個常數。哪些列或常量被用於查找索引列上的值。

  9 rows

    rows 列顯示 MySQL 認為它執行查詢時必須檢查的行數。越少越好!

  10 Extra

    其他的額外重要的信息。

Using filesort  說明 mysql 會對數據使用一個外部的索引排序
Using temporary 使了用臨時表保存中間結果,MySQL 在對查詢結果排序時使用臨時表
Using index  Using index 代表表示相應的 select 操作中使用了覆蓋索引(Covering Index)
Using where  表明使用了 where 過濾
Using join buffer   使用了連接緩存
impossible where   impossible where  
select tables optimized away 查詢執行計划生成的階段即完成優化。

 

 

 


 

 

 

 

        好幾次。。。。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM