您好,登錄后才能下訂單哦!
小編給大家分享一下mysql中執行計劃索引的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
首先執行計劃包含的信息:
id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, Extra
id
select 查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序
存在三種情況:
a) id相同,表示表(table字段)執行順序從上到上
b) id不同,如果是子查詢,id越大表執行的優先級越高
c) id有相同也有不同,id相同,可認為是同一組,從上至下順序執行,所有組中id越大執行優先級越高
select_type
主要有六種
SIMPLE 簡單查詢,不包括自查詢及union
PRIMAY 查詢中包含任何復雜的子部分的最外層查詢的標記
SUBQUERY 在select或where子句列表中包含自查詢
DERIVED 在from列表中包括的子查詢標記為derived(衍生)mysql遞歸查詢這些子查詢并放在臨時表里
UNION 如果第二個select出現在union之后則標記為union,
如果union包含在from子句的子查詢中,外層的select標記為derived
UNION RESULT union結果的合并
table
對應的表
type
訪問類型
效率 system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL
主要使用到的:system>const>eq_ref>ref>range>index>ALL
system 表只有一行記錄(系統表)
const 索引常量
eq_ref 唯一性索引掃描
ref 非唯一性索引掃描
range 范圍索引掃描 (索引列使用 between in等范圍限定)
index 全索引掃描
ALL 全表掃描
possible_keys
查詢涉及到的字段上存在的索引一個或多個(可能用到的,但不一定會使用)
keys
實際使用的索引
key_len
索引使用的字節數,可通過該列計算查詢中使用索引的長度,同樣查詢結果條件下(不損失精度的條件下),長度越小越好
顯示的值為索引的最大可能長度,非實際長度,即key_len通過表定義計算所得非表內檢索值
ref
顯示索引用到的列(或用到的是常量) 例 db.table.col ,const
rows
根據表統計信息及索引選用情況,大致估算出找到所需的記錄需要讀取的行數
Extra
其他信息
1、Using filesort
使用外部的索引排序(文件排序),而不是按照索引的排序進行讀取
例如使用復合索引的表,查詢排序時只使用了復合索引的其中一列,可能會造成文件排序。需盡量避免的情況
2、Using temporary
使用了臨時表保存中間結果,常見于order by 及group by
消耗資源,需避免的情況
order by 及group by 語句中使用覆蓋索引
3、Using index
使用的覆蓋索引,避免訪問表的數據行
同時出現using where,表示索引用來查詢索引鍵值的查找(如查詢結果中的列被索引列覆蓋)
如果沒有出現using where,表示索引直接用來讀取數據,不執行查找動作
*覆蓋索引(Covering index)
select 的數據列只從索引中獲得,不必查找數據行
4、Using where
5、Using join buffer
使用了連接緩存
6、Impossible where
where 子句結果false
7、select table optimized away
在沒有group by子句的情況下,基于索引優化MIN/MAX操作或者對于MyISAM 存儲引擎優化COUNT(*) 操作,不必等到執行階段再進行計算,查詢執行接話生成階段即可完成優化
8、distinct
優化distinct操作,在找到第一匹配的元組后即停止找同樣值的動作
以上是“mysql中執行計劃索引的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。