天天看點

mysql如何監測是否命中索引?

mysql的執行計劃

使用執行計劃。

什麼是執行計劃?

EXPLAIN  SELECT ……
變體:
1. EXPLAIN EXTENDED SELECT ……
将執行計劃“反編譯”成SELECT語句,運作SHOW WARNINGS 可得到被MySQL優化器優化後的查詢語句 
2. EXPLAIN PARTITIONS SELECT ……
用于分區表的EXPLAIN      

執行計劃包含的資訊

mysql如何監測是否命中索引?

select_type 

表示查詢中每個select子句的類型(簡單 OR複雜)

mysql如何監測是否命中索引?

a.SIMPLE:查詢中不包含子查詢或者UNION

b.查詢中若包含任何複雜的子部分,最外層查詢則被标記為:PRIMARY

c.在SELECT或WHERE清單中包含了子查詢,該子查詢被标記為:SUBQUERY

d.在FROM清單中包含的子查詢被标記為:DERIVED(衍生)

e.若第二個SELECT出現在UNION之後,則被标記為UNION;若UNION包含在  FROM子句的子查詢中,外層SELECT将被标記為:DERIVED

f.從UNION表擷取結果的SELECT被标記為:UNION RESULT

表示MySQL在表中找到所需行的方式,又稱“通路類型”,常見類型如下:

type

mysql如何監測是否命中索引?

由左至右,由最差到最好

a.ALL:Full Table Scan, MySQL将周遊全表以找到比對的行

b.index:Full Index Scan,index與ALL差別為index類型隻周遊索引樹

c.range:索引範圍掃描,對索引的掃描開始于某一點,傳回比對值域的行,常見于between、<、>等的查詢

d.ref:非唯一性索引掃描,傳回比對某個單獨值的所有行。常見于使用非唯一索引即唯一索引的非唯一字首進行的查找

e.eq_ref:唯一性索引掃描,對于每個索引鍵,表中隻有一條記錄與之比對。常見于主鍵或唯一索引掃描

f.const、system:當MySQL對查詢某部分進行優化,并轉換為一個常量時,使用這些類型通路。如将主鍵置于where清單中,MySQL就能将該查詢轉換為一個常量

g.NULL:MySQL在優化過程中分解語句,執行時甚至不用通路表或索引

possible_keys

指出MySQL能使用哪個索引在表中找到行,查詢涉及到的字段上若存在索引,則該索引将被列出,但不一定被查詢使用

key

顯示MySQL在查詢中實際使用的索引,若沒有使用索引,顯示為NULL

TIPS:查詢中若使用了覆寫索引,則該索引僅出現在key清單中

key_len

表示索引中使用的位元組數,可通過該列計算查詢中使用的索引的長度

key_len顯示的值為索引字段的最大可能長度,并非實際使用長度,即key_len是根據表定義計算而得,不是通過表内檢索出的

ref

表示上述表的連接配接比對條件,即哪些列或常量被用于查找索引列上的值

rows

表示MySQL根據表統計資訊及索引選用情況,估算的找到所需的記錄所需要讀取的行數

Extra

包含不适合在其他列中顯示但十分重要的額外資訊

a.Using index

該值表示相應的select操作中使用了覆寫索引(Covering Index)

TIPS:覆寫索引(Covering Index)

MySQL可以利用索引傳回select清單中的字段,而不必根據索引再次讀取資料檔案

包含所有滿足查詢需要的資料的索引稱為 覆寫索引(Covering Index)

注意:

如果要使用覆寫索引,一定要注意select清單中隻取出需要的列,不可select *,因為如果将所有字段一起做索引會導緻索引檔案過大,查詢性能下降

b.Using where

表示MySQL伺服器在存儲引擎受到記錄後進行“後過濾”(Post-filter),

如果查詢未能使用索引,Using where的作用隻是提醒我們MySQL将用where子句來過濾結果集

c.Using temporary

表示MySQL需要使用臨時表來存儲結果集,常見于排序和分組查詢

d.Using filesort

MySQL中無法利用索引完成的排序操作稱為“檔案排序”

MySQL執行計劃的局限

•EXPLAIN不會告訴你關于觸發器、存儲過程的資訊或使用者自定義函數對查詢的影響情況

•EXPLAIN不考慮各種Cache

•EXPLAIN不能顯示MySQL在執行查詢時所作的優化工作

•部分統計資訊是估算的,并非精确值

•EXPALIN隻能解釋SELECT操作,其他操作要重寫為SELECT後檢視執行計劃

本文轉載:http://www.cnblogs.com/ggjucheng/archive/2012/11/11/2765237.html