共計(jì) 1821 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。
丸趣 TV 小編給大家分享一下 mysql 中執(zhí)行計(jì)劃索引的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
首先執(zhí)行計(jì)劃包含的信息:
id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, Extra
id
select 查詢(xún)的序列號(hào),包含一組數(shù)字,表示查詢(xún)中執(zhí)行 select 子句或操作表的順序
存在三種情況:
a) id 相同,表示表(table 字段)執(zhí)行順序從上到上
b) id 不同,如果是子查詢(xún),id 越大表執(zhí)行的優(yōu)先級(jí)越高
c) id 有相同也有不同,id 相同,可認(rèn)為是同一組,從上至下順序執(zhí)行,所有組中 id 越大執(zhí)行優(yōu)先級(jí)越高
select_type
主要有六種
SIMPLE 簡(jiǎn)單查詢(xún),不包括自查詢(xún)及 union
PRIMAY 查詢(xún)中包含任何復(fù)雜的子部分的最外層查詢(xún)的標(biāo)記
SUBQUERY 在 select 或 where 子句列表中包含自查詢(xún)
DERIVED 在 from 列表中包括的子查詢(xún)標(biāo)記為 derived(衍生)mysql 遞歸查詢(xún)這些子查詢(xún)并放在臨時(shí)表里
UNION 如果第二個(gè) select 出現(xiàn)在 union 之后則標(biāo)記為 union,
如果 union 包含在 from 子句的子查詢(xún)中,外層的 select 標(biāo)記為 derived
UNION RESULT union 結(jié)果的合并
table
對(duì)應(yīng)的表
type
訪問(wèn)類(lèi)型
效率 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 表只有一行記錄(系統(tǒng)表)
const 索引常量
eq_ref 唯一性索引掃描
ref 非唯一性索引掃描
range 范圍索引掃描(索引列使用 between in 等范圍限定)
index 全索引掃描
ALL 全表掃描
possible_keys
查詢(xún)涉及到的字段上存在的索引一個(gè)或多個(gè)(可能用到的,但不一定會(huì)使用)
keys
實(shí)際使用的索引
key_len
索引使用的字節(jié)數(shù),可通過(guò)該列計(jì)算查詢(xún)中使用索引的長(zhǎng)度,同樣查詢(xún)結(jié)果條件下(不損失精度的條件下),長(zhǎng)度越小越好
顯示的值為索引的最大可能長(zhǎng)度,非實(shí)際長(zhǎng)度,即 key_len 通過(guò)表定義計(jì)算所得非表內(nèi)檢索值
ref
顯示索引用到的列(或用到的是常量)例 db.table.col ,const
rows
根據(jù)表統(tǒng)計(jì)信息及索引選用情況,大致估算出找到所需的記錄需要讀取的行數(shù)
Extra
其他信息
1、Using filesort
使用外部的索引排序(文件排序),而不是按照索引的排序進(jìn)行讀取
例如使用復(fù)合索引的表,查詢(xún)排序時(shí)只使用了復(fù)合索引的其中一列,可能會(huì)造成文件排序。需盡量避免的情況
2、Using temporary
使用了臨時(shí)表保存中間結(jié)果,常見(jiàn)于 order by 及 group by
消耗資源,需避免的情況
order by 及 group by 語(yǔ)句中使用覆蓋索引
3、Using index
使用的覆蓋索引,避免訪問(wèn)表的數(shù)據(jù)行
同時(shí)出現(xiàn) using where,表示索引用來(lái)查詢(xún)索引鍵值的查找(如查詢(xún)結(jié)果中的列被索引列覆蓋)
如果沒(méi)有出現(xiàn) using where,表示索引直接用來(lái)讀取數(shù)據(jù),不執(zhí)行查找動(dòng)作
* 覆蓋索引(Covering index)
select 的數(shù)據(jù)列只從索引中獲得,不必查找數(shù)據(jù)行
4、Using where
5、Using join buffer
使用了連接緩存
6、Impossible where
where 子句結(jié)果 false
7、select table optimized away
在沒(méi)有 group by 子句的情況下,基于索引優(yōu)化 MIN/MAX 操作或者對(duì)于 MyISAM 存儲(chǔ)引擎優(yōu)化 COUNT(*) 操作,不必等到執(zhí)行階段再進(jìn)行計(jì)算,查詢(xún)執(zhí)行接話生成階段即可完成優(yōu)化
8、distinct
優(yōu)化 distinct 操作,在找到第一匹配的元組后即停止找同樣值的動(dòng)作
以上是“mysql 中執(zhí)行計(jì)劃索引的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!