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操作,在找到第一匹配的元組後即停止找同樣值的動作
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908925/viewspace-2643354/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql索引和執行計劃MySql索引
- 【MySQL】MySQL的執行計劃及索引優化MySql索引優化
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- 關於索引的執行計劃記載索引
- 理解索引:MySQL執行計劃詳細介紹索引MySql
- (4) MySQL中EXPLAIN執行計劃分析MySqlAI
- Oracle 索引和執行計劃Oracle索引
- MySQL 執行計劃MySql
- MySQL執行計劃MySql
- MySQL:2020 端午節隨筆(索引下探和唯一索引特殊執行計劃)MySql索引
- mysql執行計劃explainMySqlAI
- mysql explain 執行計劃MySqlAI
- MySQL執行計劃解析MySql
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- MySQL5.6執行計劃錯誤案例分析MySql
- explain執行計劃分析AI
- SQL執行計劃分析SQL
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- 分析執行計劃最佳化SQLORACLE的執行計劃(轉)SQLOracle
- MySQL執行計劃解析(四)MySql
- 讀懂MySQL執行計劃MySql
- 讀懂 MySQL 執行計劃MySql
- MySql索引筆記MySql索引筆記
- Oracle訪問索引的執行計劃(一)Oracle索引
- Oracle訪問索引的執行計劃(二)Oracle索引
- Oracle訪問索引的執行計劃(三)Oracle索引
- Oracle訪問索引的執行計劃(四)Oracle索引
- Oracle訪問索引的執行計劃(五)Oracle索引
- 建立索引調整sql的執行計劃索引SQL
- 帶你看懂MySQL執行計劃MySql
- MySQL Explain執行計劃 - 詳解MySqlAI
- 十六、Mysql之Explain執行計劃MySqlAI
- mysql explain 執行計劃詳解MySqlAI
- MySQL執行計劃EXPLAIN詳解MySqlAI
- DB2執行計劃分析DB2
- SqlServer的執行計劃如何分析?SQLServer
- 【優化】ORACLE執行計劃分析優化Oracle
- 建了索引執行計劃會有區別了索引