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