久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql執(zhí)行計(jì)劃指的是什么

共計(jì) 3565 個(gè)字符,預(yù)計(jì)需要花費(fèi) 9 分鐘才能閱讀完成。

這篇文章主要講解了“mysql 執(zhí)行計(jì)劃指的是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著丸趣 TV 小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“mysql 執(zhí)行計(jì)劃指的是什么”吧!

在 mysql 中,執(zhí)行計(jì)劃是數(shù)據(jù)庫(kù)提供給用戶的一套對(duì) sql 語(yǔ)句進(jìn)行解析、分析、優(yōu)化功能的工具。執(zhí)行計(jì)劃的作用有:1、展示表的讀取順序;2、數(shù)據(jù)讀取操作的類型;3、展示哪些索引是可以使用的;4、展示哪些索引是實(shí)際上使用的;5、展示表之間的引用關(guān)系;6、展示每張表被查詢的行數(shù)。

在數(shù)據(jù)庫(kù)查詢的時(shí)候,我們通常會(huì)使用 sql 語(yǔ)句去查詢自己所需要的數(shù)據(jù)。但是,關(guān)于 sql 在數(shù)據(jù)庫(kù)中是如何執(zhí)行的,它有沒(méi)有使用索引,具體使用了哪些索引,查找了哪些字段和表,他們的順序是怎樣的,分別用時(shí)多少等等信息我們不得而知,那么有沒(méi)有什么方法可以看到這些信息,mysql 給我們提供了一套工具——執(zhí)行計(jì)劃。

一、什么是執(zhí)行計(jì)劃

執(zhí)行計(jì)劃是數(shù)據(jù)庫(kù)提供給我們的一套對(duì) sql 語(yǔ)句進(jìn)行解析、分析、優(yōu)化功能的工具,他具有以下的作用:

展示表的讀取順序;

數(shù)據(jù)讀取操作的類型;

哪些索引是可以使用的;

哪些索引是實(shí)際上使用的;

表之間的引用關(guān)系;

每張表被查詢的行數(shù)。

注意:執(zhí)行計(jì)劃只是數(shù)據(jù)庫(kù)針對(duì) sql 給出最佳的優(yōu)化參考方案,并不一定是最優(yōu)解,即不要過(guò)度相信執(zhí)行計(jì)劃

二、如何使用執(zhí)行計(jì)劃

使用執(zhí)行計(jì)劃很簡(jiǎn)單,在要執(zhí)行的 sql 前面加上關(guān)鍵詞 explain 即可。

三、執(zhí)行計(jì)劃信息

從圖中可以看出,sql 執(zhí)行計(jì)劃主要包含以下信息:id、select_type、table、partitions、type、possible_keys、key、key_len、ref、rows、filtered、Extra。

3.1、id

select 查詢序列號(hào),id 相同,執(zhí)行順序由上至下;id 不同,id 值越大優(yōu)先級(jí)越高,越先被執(zhí)行;

3.2、select_type

select_type:表示 select 語(yǔ)句的類型,可以有以下取值;

SIMPLE:表示簡(jiǎn)單查詢,其中不包含連接查詢和?查詢;

PRIMARY:表示主查詢,或者是最外?的查詢語(yǔ)句;

UNION:表示連接查詢的第 2 個(gè)或后?的查詢語(yǔ)句;

DEPENDENT UNION:UNION 中的第?個(gè)或后?的 SELECT 語(yǔ)句,取決于外?的查詢;

UNION RESULT:連接查詢的結(jié)果;

SUBQUERY:?查詢中的第 1 個(gè) SELECT 語(yǔ)句;

DEPENDENT SUBQUERY:?查詢中的第 1 個(gè) SELECT 語(yǔ)句,取決于外?的查詢;

DERIVED:SELECT(FROM ?句的?查詢)。

3.3、table

table:表示查詢的表名,可以有以下幾種情況:

顯示表名,如果起了別名,則顯示別名;

derivenN:表示查詢的條件是一個(gè)子查詢;

union1,2:表示表 1 和表 2 使用 union。

3.4、partitions

partitions:匹配的分區(qū)。

3.5、type

type:這?列表示表關(guān)聯(lián)類型或訪問(wèn)類型,即數(shù)據(jù)庫(kù)決定如何查找表中的?,查找數(shù)據(jù)?記錄的?概范圍。依次從最優(yōu)到最差分別為:system const eq_ref ref range index all

system:表中只有一行記錄,相當(dāng)于系統(tǒng)表,這是 const 類型的特列,平時(shí)不會(huì)出現(xiàn),可以忽略不計(jì);

const:通過(guò)索引一次命中,匹配一行數(shù)據(jù),所以很快,常?于 PRIMARY KEY 或者 UNIQUE 索引的查詢,可理解為 const 是最優(yōu)化的;

eq_ref:唯一性索引掃描,對(duì)于每個(gè)索引鍵,表中只有一條記錄與之匹配,常用語(yǔ)主鍵或唯一索引掃描,這可能是在 const 之外最好的聯(lián)接類型了;

ref:非唯一性索引掃描,返回匹配某個(gè)單獨(dú)值的所有行,用于 =、或 操作符帶索引的列;

range:只檢索給定范圍的行,使用一個(gè)索引來(lái)選擇行,一般用于 between、、、in 等查詢,這種范圍查詢要比 index 要好,因?yàn)樗恍枰獟呙杷饕囊粋€(gè)點(diǎn),結(jié)束于另外一個(gè)點(diǎn);

index:需要遍歷索引樹(shù);

all:即全表掃描,意味著數(shù)據(jù)庫(kù)需要從頭到尾去查找所需要的?。通常情況下這需要增加索引來(lái)進(jìn)?優(yōu)化了。

注意:在進(jìn)行 sql 優(yōu)化的時(shí)候至少要優(yōu)化到 range,推薦優(yōu)化到 ref,最好是 const。

3.6、possible_keys

possible_keys:這?列顯示查詢可能使?哪些索引來(lái)查找。explain 時(shí)可能出現(xiàn) possible_keys 有列,? key 顯示 NULL 的情況,這種情況是因?yàn)楸碇袛?shù)據(jù)不多,數(shù)據(jù)庫(kù)認(rèn)為索引對(duì)此查詢幫助不?,選擇了全表查詢。
如果該列是 NULL,則沒(méi)有相關(guān)的索引。在這種情況下,可以通過(guò)檢查 where ?句看是否可以創(chuàng)造?個(gè)適當(dāng)?shù)乃饕齺?lái)提?查詢性能,然后? explain 查看效果。

3.7、key

key:顯示數(shù)據(jù)庫(kù)實(shí)際決定使?的鍵 (索引)。如果沒(méi)有選擇索引,key 的值是 NULL。可以強(qiáng)制使?索引或者忽略索引。

3.8、key_len

key_len:這?列顯示了數(shù)據(jù)庫(kù)在索引?使?的字節(jié)數(shù),通過(guò)這個(gè)值可以算出具體使?了索引中的哪些列,數(shù)值計(jì)算如下:

字符串類型
char(n):n 字節(jié)長(zhǎng)度
varchar(n):2 字節(jié)存儲(chǔ)字符串長(zhǎng)度,如果是 utf-8,則長(zhǎng)度 3n + 2

數(shù)值類型
tinyint:1 字節(jié)
smallint:2 字節(jié)
int:4 字節(jié)
bigint:8 字節(jié)

時(shí)間類型
date:3 字節(jié)
timestamp:4 字節(jié)
datetime:8 字節(jié)

如果字段允許為 NULL,需要 1 字節(jié)記錄是否為 NULL

注意:索引最??度是 768 字節(jié),當(dāng)字符串過(guò)?時(shí),數(shù)據(jù)庫(kù)會(huì)做?個(gè)類似左前綴索引的處理,將前半部分的字符提取出來(lái)做索引。

3.9、ref

ref:這?列顯示了在 key 列記錄的索引中表查找值所?到的列或常量,常見(jiàn)的有:const(常量),func,null,字段名(例:film.id)

3.10、rows

rows:這?列是數(shù)據(jù)庫(kù)估計(jì)要讀取并掃描的?數(shù),注意這個(gè)不是結(jié)果集?的?數(shù),因此這個(gè)值越小越好。

3.11、filtered

filtered:返回結(jié)果的行數(shù)占讀取行數(shù)的百分比,值越大越好。

3.12、Extra

extra:這一列顯示的是額外的信息,即不包含在其他列的信息,具體值如下:

distinct:數(shù)據(jù)庫(kù)發(fā)現(xiàn)第 1 個(gè)匹配?后, 停?為當(dāng)前的?組合搜索更多的?;

not exists:數(shù)據(jù)庫(kù)能夠?qū)Σ樵冞M(jìn)? LEFT JOIN 優(yōu)化, 發(fā)現(xiàn) 1 個(gè)匹配 LEFT JOIN 標(biāo)準(zhǔn)的?后, 不再為前?的的?組合在該表內(nèi)檢查更多的?;

range checked for each record (index map: #):數(shù)據(jù)庫(kù)沒(méi)有發(fā)現(xiàn)好的可以使?的索引, 但發(fā)現(xiàn)如果來(lái)?前?的表的列值已知, 可能部分索引可以使?;

using filesort(重點(diǎn)):數(shù)據(jù)庫(kù)會(huì)對(duì)結(jié)果使??個(gè)外部索引排序,?不是按索引次序從表?讀取?。此時(shí) mysql 會(huì)根據(jù)聯(lián)接類型瀏覽所有符合條件的記錄,并保存排序關(guān)鍵字和?指針,然后排序關(guān)鍵字并按順序檢索?信息。這種情況下?般也是要考慮使?索引來(lái)優(yōu)化的;

using index(重點(diǎn)):從只使?索引樹(shù)中的信息?不需要進(jìn)?步搜索讀取實(shí)際的?來(lái)檢索表中的列信息,即表示 select 使用了覆蓋索引而不必去回表查詢;

using temporary(重點(diǎn)):數(shù)據(jù)庫(kù)需要?jiǎng)?chuàng)建?張臨時(shí)表來(lái)處理查詢,這種情況常見(jiàn)于 order by 和 group by。出現(xiàn)這種情況?般是要進(jìn)?優(yōu)化的,?先是想到?索引來(lái)優(yōu)化;

using where:數(shù)據(jù)庫(kù)將在存儲(chǔ)引擎檢索?后再進(jìn)?過(guò)濾。就是先讀取整?數(shù)據(jù),再按 where 條件進(jìn)?檢查,符合就留下,不符合就丟棄;

using index condition:與 Using where 類似,查詢的列不完全被索引覆蓋,where 條件中是?個(gè)前導(dǎo)列的范圍;

using sort_union(…), Using union(…), Using intersect(…):這些函數(shù)說(shuō)明如何為 index_merge 聯(lián)接類型合并索引掃描;

using index for group-by:類似于訪問(wèn)表的 Using index ?式,Using index for group-by 表示數(shù)據(jù)庫(kù)發(fā)現(xiàn)了?個(gè)索引, 可以?來(lái)查 詢 group by 或 distinct 查詢的所有列, ?不要額外搜索硬盤(pán)訪問(wèn)實(shí)際的表;

null:查詢的列未被索引覆蓋,并且 where 篩選條件是索引的前導(dǎo)列,意味著?到了索引,但是部分字段未被索引覆蓋,必須通過(guò)“回表”來(lái)實(shí)現(xiàn),不是純粹地?到了索引,也不是完全沒(méi)?到索引,即使用了索引但需要回表操作,應(yīng)該避免回表操作。

感謝各位的閱讀,以上就是“mysql 執(zhí)行計(jì)劃指的是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì) mysql 執(zhí)行計(jì)劃指的是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-13發(fā)表,共計(jì)3565字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 泰州市| 历史| 自贡市| 施甸县| 响水县| 揭阳市| 肥城市| 扎鲁特旗| 策勒县| 南召县| 镇康县| 邛崃市| 闽侯县| 宜川县| 大方县| 商都县| 建平县| 新邵县| 丰宁| 青冈县| 江永县| 南部县| 宝坻区| 屏南县| 东阿县| 东方市| 威信县| 宜章县| 建湖县| 兴隆县| 马边| 卢龙县| 广东省| 岳阳市| 南和县| 凉山| 通河县| 萨嘎县| 赤壁市| 望都县| 漳州市|