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:2020 端午節隨筆(索引下探和唯一索引特殊執行計劃)MySql索引
- 理解索引:MySQL執行計劃詳細介紹索引MySql
- (4) MySQL中EXPLAIN執行計劃分析MySqlAI
- MySQL執行計劃MySql
- MySQL 執行計劃MySql
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- MySQL執行計劃解析MySql
- mysql explain 執行計劃MySqlAI
- mysql執行計劃explainMySqlAI
- explain執行計劃分析AI
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- MySql索引筆記MySql索引筆記
- MySQL執行計劃解析(四)MySql
- 讀懂MySQL執行計劃MySql
- mysql explain 執行計劃詳解MySqlAI
- 十六、Mysql之Explain執行計劃MySqlAI
- MySQL Explain執行計劃 - 詳解MySqlAI
- 帶你看懂MySQL執行計劃MySql
- 建了索引執行計劃會有區別了索引
- MySQL 因資料型別轉換導致執行計劃使用低效索引MySql資料型別索引
- SqlServer的執行計劃如何分析?SQLServer
- DB2執行計劃分析DB2
- MySQL 筆記 - 索引優化MySql筆記索引優化
- mysql主從庫執行計劃不同MySql
- mysql調優之——執行計劃explainMySqlAI
- Docker筆記四之執行MySQLDocker筆記MySql
- 執行計劃-1:獲取執行計劃
- MySQL explain執行計劃詳細解釋MySqlAI
- MySQL學習筆記:索引失效MySql筆記索引
- mysql總結筆記 -- 索引篇MySql筆記索引
- MySQL 5.7 優化不能只看執行計劃MySql優化
- MySql中執行計劃如何來的——Optimizer TraceMySql
- MySQL學習筆記:組合索引-索引下推MySql筆記索引
- oracle執行計劃------未走索引,隱式轉換的坑Oracle索引
- Mysql索引讀書筆記(待續)MySql索引筆記
- SYBASE執行計劃
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle