欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL執(zhí)行計(jì)劃的深入分析

 更新時(shí)間:2019年01月08日 11:34:26   作者:聽(tīng)風(fēng)。  
這篇文章主要給大家介紹了關(guān)于MySQL執(zhí)行計(jì)劃的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

在之前的面試過(guò)程中,問(wèn)到執(zhí)行計(jì)劃,有很多童鞋不知道是什么?甚至將執(zhí)行計(jì)劃與執(zhí)行時(shí)間認(rèn)為是同一個(gè)概念。今天我們就一起來(lái)了解一下執(zhí)行計(jì)劃到底是什么?有什么用途?

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

執(zhí)行計(jì)劃,簡(jiǎn)單的來(lái)說(shuō),是SQL在數(shù)據(jù)庫(kù)中執(zhí)行時(shí)的表現(xiàn)情況,通常用于SQL性能分析,優(yōu)化等場(chǎng)景。

一. 執(zhí)行計(jì)劃能告訴我們什么?

  • SQL如何使用索引
  • 聯(lián)接查詢的執(zhí)行順序
  • 查詢掃描的數(shù)據(jù)函數(shù)

二. 執(zhí)行計(jì)劃中的內(nèi)容


SQL執(zhí)行計(jì)劃的輸出可能為多行,每一行代表對(duì)一個(gè)數(shù)據(jù)庫(kù)對(duì)象的操作

1. ID列

  • ID列中的如果數(shù)據(jù)為一組數(shù)字,表示執(zhí)行SELECT語(yǔ)句的順序;如果為NULL,則說(shuō)明這一行數(shù)據(jù)是由另外兩個(gè)SQL語(yǔ)句進(jìn)行 UNION操作后產(chǎn)生的結(jié)果集
  • ID值相同時(shí),說(shuō)明SQL執(zhí)行順序是按照顯示的從上至下執(zhí)行的
  • ID值不同時(shí),ID值越大代表優(yōu)先級(jí)越高,則越先被執(zhí)行

演示


可以看到上面的執(zhí)行計(jì)劃返回了3行結(jié)果,id列的值可以看作是SQL中所具有的SELECT操作的序號(hào)

由于上述SQL中只有一個(gè)SELECT,所以id全為1,因此,我們就要按照由上至下讀取執(zhí)行計(jì)劃

按照我們的SQL語(yǔ)句,我們會(huì)認(rèn)為執(zhí)行順序是a,b,c,但是通過(guò)上圖可以發(fā)現(xiàn),Mysql并不是完成按照SQL中所寫(xiě)的順序來(lái)進(jìn)行表的關(guān)聯(lián)操作的

執(zhí)行對(duì)表的執(zhí)行順序?yàn)閍,c,b,這是由于MySQL優(yōu)化器會(huì)根據(jù)表中的索引的統(tǒng)計(jì)信息來(lái)調(diào)整表關(guān)聯(lián)的實(shí)際順序

2. SELECT_TYPE列

含義
SIMPLE 不包含子查詢或是UNION操作的查詢
PRIMARY 查詢中如果包含任何子查詢,那么最外層的查詢則被標(biāo)記為PRIMARY
SUBQUERY SELECT 列表中的子查詢
DEPENDENT SUBQUERY 依賴外部結(jié)果的子查詢
UNION Union操作的第二個(gè)或是之后的查詢的值為union
DEPENDENT UNION 當(dāng)UNION作為子查詢時(shí),第二或是第二個(gè)后的查詢的select_type值
UNION RESULT UNION產(chǎn)生的結(jié)果集
DERIVED 出現(xiàn)在FROM子句中的子查詢

3. TABLE列

包含以下幾種結(jié)果:

輸出去數(shù)據(jù)行所在表的名稱,如果表取了別名,則顯示的是別名
<union M,N>: 由ID為M,N查詢union產(chǎn)生的結(jié)果集
<derived N>/<subquery N> :由ID為N的查詢產(chǎn)生的結(jié)果

4. PARTITIONS列:

查詢匹配的記錄來(lái)自哪一個(gè)分區(qū)
對(duì)于分區(qū)表,顯示查詢的分區(qū)ID
對(duì)于非分區(qū)表,顯示為NULL

5. TYPE列

按性能從高至低排列如下:

含義
system 這是const聯(lián)接類型的一個(gè)特例,當(dāng)查詢的表只有一行時(shí)使用
const 表中有且只有一個(gè)匹配的行時(shí)使用,如對(duì)主鍵或是唯一索引的查詢,這是效率最高的聯(lián)接方式
eq_ref 唯一索引或主鍵索引查詢,對(duì)應(yīng)每個(gè)索引鍵,表中只有一條記錄與之匹配
ref 非唯一索引查找,返回匹配某個(gè)單獨(dú)值的所有行
ref_or_null 類似于ref類型的查詢,但是附加了對(duì)NULL值列的查詢
index_merge 該聯(lián)接類型表示使用了索引合并優(yōu)化方法
range 索引范圍掃描,常見(jiàn)于between、>、<這樣的查詢條件
index FULL index Scan 全索引掃描,同ALL的區(qū)別是,遍歷的是索引樹(shù)
ALL FULL TABLE Scan 全表掃描,這是效率最差的聯(lián)接方式

6. Extra列

包含MySQL如何執(zhí)行查詢的附加信息

含義
Distinct 優(yōu)化distinct操作,在找到第一個(gè)匹配的元素后即停止查找
Not exists 使用not exists來(lái)優(yōu)化查詢
Using filesort 使用額外操作進(jìn)行排序,通常會(huì)出現(xiàn)在order by或group by查詢中
Using index 使用了覆蓋索引進(jìn)行查詢
Using temporary MySQL需要使用臨時(shí)表來(lái)處理查詢,常見(jiàn)于排序,子查詢,和分組查詢
Using where 需要在MySQL服務(wù)器層使用WHERE條件來(lái)過(guò)濾數(shù)據(jù)
select tables optimized away 直接通過(guò)索引來(lái)獲得數(shù)據(jù),不用訪問(wèn)表,這種情況通常效率是最高的

7. POSSIBLE_KEYS列

指出MySQL能使用哪些索引來(lái)優(yōu)化查詢

查詢列所涉及到的列上的索引都會(huì)被列出,但不一定會(huì)被使用

8. KEY列

查詢優(yōu)化器優(yōu)化查詢實(shí)際所使用的索引

如果表中沒(méi)有可用的索引,則顯示為NULL

如果查詢使用了覆蓋索引,則該索引僅出現(xiàn)在Key列中

9. KEY_LEN列

顯示MySQL索引所使用的字節(jié)數(shù),在聯(lián)合索引中如果有3列,假如3列字段總長(zhǎng)度為100個(gè)字節(jié),Key_len顯示的可能會(huì)小于100字節(jié),比如30字節(jié),這就說(shuō)明在查詢過(guò)程中沒(méi)有使用到聯(lián)合索引的所有列,只是利用到了前面的一列或2列

  • 表示索引字段的最大可能長(zhǎng)度
  • Key_len的長(zhǎng)度由字段定義計(jì)算而來(lái),并非數(shù)據(jù)的實(shí)際長(zhǎng)度

10. Ref列

表示當(dāng)前表在利用Key列記錄中的索引進(jìn)行查詢時(shí)所用到的列或常量

11. rows列

  • 表示MySQL通過(guò)索引的統(tǒng)計(jì)信息,估算出來(lái)的所需讀取的行數(shù)(關(guān)聯(lián)查詢時(shí),顯示的是每次嵌套查詢時(shí)所需要的行數(shù))
  • Rows值的大小是個(gè)統(tǒng)計(jì)抽樣結(jié)果,并不十分準(zhǔn)確

12. Filtered列

  • 表示返回結(jié)果的行數(shù)占需讀取行數(shù)的百分比
  • Filtered列的值越大越好(值越大,表明實(shí)際讀取的行數(shù)與所需要返回的行數(shù)越接近)
  • Filtered列的值依賴統(tǒng)計(jì)信息,所以同樣也不是十分準(zhǔn)確,只是一個(gè)參考值

三. 執(zhí)行計(jì)劃的限制

  • 無(wú)法展示存儲(chǔ)過(guò)程,觸發(fā)器,UDF對(duì)查詢的影響
  • 無(wú)法使用EXPLAIN對(duì)存儲(chǔ)過(guò)程進(jìn)行分析
  • 早期版本的MySQL只支持對(duì)SELECT語(yǔ)句進(jìn)行分析

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 深入解析MySQL索引數(shù)據(jù)結(jié)構(gòu)

    深入解析MySQL索引數(shù)據(jù)結(jié)構(gòu)

    什么是索引?索引就是排好序的數(shù)據(jù)結(jié)構(gòu),可以幫助我們快速的查找到數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MySQL索引數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • 淺析mysql union和union all

    淺析mysql union和union all

    union 是對(duì)數(shù)據(jù)進(jìn)行并集操作,不包括重復(fù)行,同時(shí)進(jìn)行默認(rèn)排序而Union all 是對(duì)數(shù)據(jù)進(jìn)行并集操作,包括重復(fù)行,不進(jìn)行排序,下面給大家詳細(xì)介紹mysql union和union all,感興趣的朋友一起看看吧
    2017-10-10
  • MySQL數(shù)據(jù)xtrabackup物理備份的方式

    MySQL數(shù)據(jù)xtrabackup物理備份的方式

    Xtrabackup是開(kāi)源免費(fèi)的支持MySQL 數(shù)據(jù)庫(kù)熱備份的軟件,在 Xtrabackup 包中主要有 Xtrabackup 和 innobackupex 兩個(gè)工具,本文給大家介紹MySQL數(shù)據(jù)xtrabackup物理備份方法,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • 解析數(shù)據(jù)庫(kù)分頁(yè)的兩種方法對(duì)比(row_number()over()和top的對(duì)比)

    解析數(shù)據(jù)庫(kù)分頁(yè)的兩種方法對(duì)比(row_number()over()和top的對(duì)比)

    本篇文章是對(duì)數(shù)據(jù)庫(kù)分頁(yè)的兩種方法對(duì)比(row_number()over()和top的對(duì)比)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • MySQL prepare原理詳解

    MySQL prepare原理詳解

    這篇文章主要介紹了MySQL prepare的相關(guān)內(nèi)容,包括prepare的產(chǎn)生,在服務(wù)器端的執(zhí)行過(guò)程,以及jdbc對(duì)prepare的處理以及相關(guān)測(cè)試,需要的朋友可以了解下。希望對(duì)大家有所幫助。
    2017-09-09
  • MySQL報(bào)1366錯(cuò)誤的原因及解決

    MySQL報(bào)1366錯(cuò)誤的原因及解決

    SQL Error1366是一個(gè)常見(jiàn)的 MySQL 錯(cuò)誤,主要成因是數(shù)據(jù)類型不匹配或數(shù)據(jù)超出了范圍,本文主要介紹了MySQL報(bào)1366錯(cuò)誤的原因及解決,感興趣的可以了解一下
    2024-02-02
  • MySQL 壓縮的使用場(chǎng)景和解決方案

    MySQL 壓縮的使用場(chǎng)景和解決方案

    數(shù)據(jù)分布特點(diǎn),決定了空間壓縮的效率,如果存入的數(shù)據(jù)的重復(fù)率較高,其壓縮率就會(huì)較高;通常情況下字符類型數(shù)據(jù)(CHAR, VARCHAR, TEXT or BLOB )具有較高的壓縮率,而一些二進(jìn)制數(shù)據(jù)或者一些已經(jīng)壓縮過(guò)的數(shù)據(jù)的壓縮率不會(huì)很好
    2017-06-06
  • MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)視圖

    MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)視圖

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)視圖,視圖是原始數(shù)據(jù)庫(kù)數(shù)據(jù)的一種變換,是查看表中數(shù)據(jù)的另外一種方式,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • mysql 8.0.29 卸載問(wèn)題小結(jié)

    mysql 8.0.29 卸載問(wèn)題小結(jié)

    近我將筆記本重裝了,為了保留之前的程序,我把相關(guān)的注冊(cè)表和環(huán)境備份了下來(lái),重裝之后重新導(dǎo)入成功再現(xiàn)了部分軟件,下面給大家分享mysql 8.0.29 卸載問(wèn)題記錄,感興趣的朋友一起看看吧
    2024-04-04
  • php開(kāi)啟mysqli擴(kuò)展之后如何連接數(shù)據(jù)庫(kù)

    php開(kāi)啟mysqli擴(kuò)展之后如何連接數(shù)據(jù)庫(kù)

    Mysqli是php5之后才有的功能,沒(méi)有開(kāi)啟擴(kuò)展的朋友可以打開(kāi)您的php.ini的配置文件;相對(duì)于mysql有很多新的特性和優(yōu)勢(shì),需要了解的朋友可以參考下
    2012-12-12

最新評(píng)論