mysql 查詢優化 ~explain解讀之type的解讀


一 簡介:今天咱們來聊聊explain中type的相關解讀

二 類型:

    system: 表中只有一條數據. 這個類型是特殊的 const 類型.

 const: 針對主鍵或唯一索引的等值查詢掃描, 最多只返回一行數據. const 查詢速度非常快, 因為它僅僅讀取一次即可

   eq_ref: 此類型通常出現在多表的 join 查詢, 表示對於前表的每一個結果, 都只能匹配到后表的一行結果. 並且查詢的比較操作通常是 =, 查詢效率較高. 關鍵字:連接字段 主鍵或者唯一性索引

   ref : 此類型通常出現在多表的 join 查詢, 針對於非唯一或非主鍵索引, 或者是使用了 最左前綴 規則索引的查詢. 關鍵字:非唯一性索引

   ref_or_null:與ref方法類似,只是增加了null值的比較。

   range: 表示使用索引范圍查詢, 通過索引字段范圍獲取表中部分數據記錄. 這個類型通常出現在 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN() 操作中.

   index: 表示全索引掃描(full index scan), 關鍵字:查詢字段和條件都是索引本身

   index_merge:表示查詢使用了兩個以上的索引,最后取交集或者並集,常見and ,or的條件使用了不同的索引.效率不是很高 關鍵字:索引合並

   unique_subquery:用於where中的in形式子查詢,子查詢返回不重復值唯一值

   index_subquery:用於in形式子查詢使用到了輔助索引或者in常數列表,子查詢可能返回重復值,可以使用索引將子查詢去重。

   fulltext:全文索引檢索,要注意,全文索引的優先級很高,若全文索引和普通索引同時存在時,mysql不管代價,優先選擇使用全文索引

   all:這個就是全表掃描數據文件,然后再在server層進行過濾返回符合要求的記錄。

三 效率總結

   1 依次從好到差: 1 system,const,index  , range,index_merge,ALL 單獨查詢 

                                2 eq_ref,ref,ref_or_null all 多表join 查詢

                                3  index_subquery   unique_subquery  子查詢

   2  index_merge之外,其他的type只可以用到一個索引

  

 


免責聲明!

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



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