您好,登錄后才能下訂單哦!
小編給大家分享一下mysql中執(zhí)行計(jì)劃索引的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
首先執(zhí)行計(jì)劃包含的信息:
id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, Extra
id
select 查詢的序列號(hào),包含一組數(shù)字,表示查詢中執(zhí)行select子句或操作表的順序
存在三種情況:
a) id相同,表示表(table字段)執(zhí)行順序從上到上
b) id不同,如果是子查詢,id越大表執(zhí)行的優(yōu)先級(jí)越高
c) id有相同也有不同,id相同,可認(rèn)為是同一組,從上至下順序執(zhí)行,所有組中id越大執(zhí)行優(yōu)先級(jí)越高
select_type
主要有六種
SIMPLE 簡(jiǎn)單查詢,不包括自查詢及union
PRIMAY 查詢中包含任何復(fù)雜的子部分的最外層查詢的標(biāo)記
SUBQUERY 在select或where子句列表中包含自查詢
DERIVED 在from列表中包括的子查詢標(biāo)記為derived(衍生)mysql遞歸查詢這些子查詢并放在臨時(shí)表里
UNION 如果第二個(gè)select出現(xiàn)在union之后則標(biāo)記為union,
如果union包含在from子句的子查詢中,外層的select標(biāo)記為derived
UNION RESULT union結(jié)果的合并
table
對(duì)應(yīng)的表
type
訪問(wèn)類型
效率 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
查詢涉及到的字段上存在的索引一個(gè)或多個(gè)(可能用到的,但不一定會(huì)使用)
keys
實(shí)際使用的索引
key_len
索引使用的字節(jié)數(shù),可通過(guò)該列計(jì)算查詢中使用索引的長(zhǎng)度,同樣查詢結(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ù)合索引的表,查詢排序時(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)查詢索引鍵值的查找(如查詢結(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)有g(shù)roup by子句的情況下,基于索引優(yōu)化MIN/MAX操作或者對(duì)于MyISAM 存儲(chǔ)引擎優(yōu)化COUNT(*) 操作,不必等到執(zhí)行階段再進(jìn)行計(jì)算,查詢執(zhí)行接話生成階段即可完成優(yōu)化
8、distinct
優(yōu)化distinct操作,在找到第一匹配的元組后即停止找同樣值的動(dòng)作
以上是“mysql中執(zhí)行計(jì)劃索引的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。