本文介紹了mysql 執行計畫列說明。
select查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序
三種情況
id相同,執行順序由上至下
id不同,如果是子查詢,id的序號會遞增,id值越大優先順序越高,越先被執行
id相同不同,同時存在
型別描述
******
簡單的select查詢,查詢中不包含子查詢或者union
primary
查詢中若包含任何複雜的子部分,最外層查詢則被標記
subquery
在select或where列表包含了子查詢
derived
在from列表中包含的子查詢被標記為derived(衍生)
mysql遞迴執行這些子查詢,把結果放在臨時表裡
union
若第二個select出現在union之後,則被標記為union;
若union包含在from子名的子查詢中,外層select將被標記為:derived
union result
從union表獲取結果的select
對應的表名
優先順序從高到低,最好達到range及以上級別
system>const>eq_ref>ref>range>index>all型別
描述system
表只有一行記錄,這是const型別的特例,平時不會出現,可以忽略不計
const
表示通過索引一次就找到了,const用比較primary key或者unique索引 。因為為匹配一行資料,所以很快,若將主鍵置於where列表中,mysql就能將該查詢轉換為乙個常量
eq_ref
唯一性索引掃瞄,對於每個索引鍵,表中只一條記錄與之匹配。常見於主鍵或唯一索引掃瞄
ref非唯一性索引掃瞄,返回匹配某個單獨值的所有行,本質上也是一種索引訪問,它返回所有匹配某個單獨值的行,也可能會找到多個符合條件的行,所以他應該屬於查詢和掃瞄的混合體
range
只檢索給定範圍的行,使用乙個索引選擇行。key列顯示使用了哪個索引,一般就是在你的where語句**現了between、、in等表示式查詢,這個種範圍掃瞄索引比全表掃瞄要好,因為它只需要開始於索引的某一點,不用掃瞄全部索引
index
select查詢的字段是索引時,index
allfull table scan,將遍歷全表以找到匹配的行
列出所有可能用的索引,但只會使用其中1個,也可能實際不使用索引
實際使用的索引,如果為null,則沒有使用索引
查詢中若使用了覆蓋索引,則該索引和查詢的select欄位重疊
表示索引中使用的位元組數,可能過該列計算查詢中使用的索引的長度。在不損失精確性的情況下,長度越短越好
key_len顯示的值為索引欄位的最大可能長度,並非實際使用長度,即key_len是根據表定義計算而得,不是通表內檢索出的
計算公式舉例:varchar(n)變長字段+允許null=n(utf8=3,gbk=2,latin1=1)+1(null)+2*
注:mysql不同版本位元組數不同;不同字元編碼,位元組數不同
顯示索引的哪一列被使用了,如果可能的話,是乙個常數,哪些列或常量被用於查詢索引列上的值
根據統計資訊及索引選用情況,大致估算出找到所需的記錄所需要讀取的行數
型別描述
using filesort
說明mysql會對資料使用乙個外部的索引排序,而不是按照表內的索引順序進行讀取。
mysql中無法利用索引完成的排序操作稱為「檔案排序」
using temporary
使用了臨時表儲存中間查詢結果,mysql在查詢結果排序時使用臨時表。常見於order by 和 group by
using index
是否用了覆蓋索引
using where
表明使用了where過濾
using join buffer
使用了連線快取
impossible where
where子句的值總是false ,不能用來獲取任何元組
Mysql執行計畫 Extra列解析
mysql的執行計畫中,其他的列都比較好理解,唯獨這個extra列,總是看得有點讓人似懂非懂,先終於找了個機會自己研究了下。using index 中文名叫做索引覆蓋查詢 如果查詢的時候,用到了索引,並且你最終需要的資料也是這個索引的一部分,那麼就出現using index.例如 user表有索引 ...
mysql執行計畫 MySQL 執行計畫
1.執行計畫的定義 什麼是執行計畫 查詢計畫 呢?執行計畫就是一系列的操作步驟。sql是宣告性語言,它只告訴資料庫要查詢什麼,但並不告訴資料庫如何去查。資料庫所要做的就是基於演算法和統計資訊計算出一條最佳的訪問路徑。這個工作是由優化器來完成的。優化器會比較不同的執行計畫,然後選擇其中最優的一套。2....
mysql 生成執行計畫 MySQL執行計畫
和很多其他關係型資料庫不通,mysql並不會在生成查詢位元組碼來執行查詢。mysql生成查詢的一棵指令樹,然後通過儲存引擎執行完成這棵指令樹並返回結果。最終的執行計畫包含了重構查詢的全部資訊。如果某個查詢執行explain extended 之後,在執行show warnings,就可以看到重構出的...