溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql中執(zhí)行計(jì)劃索引的示例分析

發(fā)布時(shí)間:2021-11-01 15:05:39 來(lái)源:億速云 閱讀:203 作者:小新 欄目:MySQL數(shù)據(jù)庫(kù)

小編給大家分享一下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è)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI