中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql執行計劃指的是什么

發布時間:2022-11-14 09:12:41 來源:億速云 閱讀:141 作者:iii 欄目:MySQL數據庫

這篇文章主要講解了“mysql執行計劃指的是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mysql執行計劃指的是什么”吧!

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

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

一、什么是執行計劃

執行計劃是數據庫提供給我們的一套對sql語句進行解析、分析、優化功能的工具,他具有以下的作用:

  • 展示表的讀取順序;

  • 數據讀取操作的類型;

  • 哪些索引是可以使用的;

  • 哪些索引是實際上使用的;

  • 表之間的引用關系;

  • 每張表被查詢的行數。

注意:執行計劃只是數據庫針對sql給出最佳的優化參考方案,并不一定是最優解,即不要過度相信執行計劃

二、如何使用執行計劃

使用執行計劃很簡單,在要執行的sql前面加上關鍵詞explain即可。

三、執行計劃信息

mysql執行計劃指的是什么

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

3.1、id

select查詢序列號,id相同,執行順序由上至下;id不同,id值越大優先級越高,越先被執行;

3.2、select_type

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

  • SIMPLE:表示簡單查詢,其中不包含連接查詢和?查詢;

  • PRIMARY: 表示主查詢,或者是最外?的查詢語句;

  • UNION:表示連接查詢的第2個或后?的查詢語句;

  • DEPENDENT UNION:UNION中的第?個或后?的SELECT語句,取決于外?的查詢;

  • UNION RESULT: 連接查詢的結果;

  • SUBQUERY:?查詢中的第1個SELECT語句;

  • DEPENDENT SUBQUERY:?查詢中的第1個SELECT語句,取決于外?的查詢;

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

3.3、table

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

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

  • <derivenN>:表示查詢的條件是一個子查詢;

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

3.4、partitions

partitions:匹配的分區。

3.5、type

type:這?列表示表關聯類型或訪問類型,即數據庫決定如何查找表中的?,查找數據?記錄的?概范圍。依次從最優到最差分別為:system > const > eq_ref > ref > range > index > all

  • system:表中只有一行記錄,相當于系統表,這是const類型的特列,平時不會出現,可以忽略不計;

  • const:通過索引一次命中,匹配一行數據,所以很快,常?于PRIMARY KEY或者UNIQUE索引的查詢,可理解為const是最優化的;

  • eq_ref:唯一性索引掃描,對于每個索引鍵,表中只有一條記錄與之匹配,常用語主鍵或唯一索引掃描,這可能是在 const 之外最好的聯接類型了;

  • ref:非唯一性索引掃描,返回匹配某個單獨值的所有行,用于=、<或>操作符帶索引的列;

  • range:只檢索給定范圍的行,使用一個索引來選擇行,一般用于between、<、>、in等查詢,這種范圍查詢要比index要好,因為他只需要掃描索引的一個點,結束于另外一個點;

  • index:需要遍歷索引樹;

  • all:即全表掃描,意味著數據庫需要從頭到尾去查找所需要的?。通常情況下這需要增加索引來進?優化了。

注意:在進行sql優化的時候至少要優化到range,推薦優化到ref,最好是const。

3.6、possible_keys

possible_keys:這?列顯示查詢可能使?哪些索引來查找。explain 時可能出現 possible_keys 有列,? key 顯示 NULL 的情況,這種情況是因為表中數據不多,數據庫認為索引對此查詢幫助不?,選擇了全表查詢。
如果該列是NULL,則沒有相關的索引。在這種情況下,可以通過檢查 where ?句看是否可以創造?個適當的索引來提?查詢性能,然后? explain 查看效果。

3.7、key

key:顯示數據庫實際決定使?的鍵(索引)。如果沒有選擇索引,key的值是NULL。可以強制使?索引或者忽略索引。

3.8、key_len

key_len:這?列顯示了數據庫在索引?使?的字節數,通過這個值可以算出具體使?了索引中的哪些列,數值計算如下:

字符串類型
char(n):n字節長度
varchar(n):2字節存儲字符串長度,如果是utf-8,則長度 3n + 2

數值類型
tinyint:1字節
smallint:2字節
int:4字節
bigint:8字節  

時間類型 
date:3字節
timestamp:4字節
datetime:8字節

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

注意:索引最??度是768字節,當字符串過?時,數據庫會做?個類似左前綴索引的處理,將前半部分的字符提取出來做索引。

3.9、ref

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

3.10、rows

rows:這?列是數據庫估計要讀取并掃描的?數,注意這個不是結果集?的?數,因此這個值越小越好。

3.11、filtered

filtered:返回結果的行數占讀取行數的百分比,值越大越好。

3.12、Extra

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

  • distinct:數據庫發現第1個匹配?后,停?為當前的?組合搜索更多的?;

  • not exists:數據庫能夠對查詢進?LEFT JOIN優化,發現1個匹配LEFT JOIN標準的?后,不再為前?的的?組合在該表內檢查更多的?;

  • range checked for each record (index map: #):數據庫沒有發現好的可以使?的索引,但發現如果來?前?的表的列值已知,可能部分索引可以使?;

  • using filesort(重點):數據庫會對結果使??個外部索引排序,?不是按索引次序從表?讀取?。此時mysql會根據聯接類型瀏覽所有符合條件的記錄,并保存排序關鍵字和?指針,然后排序關鍵字并按順序檢索?信息。這種情況下?般也是要考慮使?索引來優化的;

  • using index(重點):從只使?索引樹中的信息?不需要進?步搜索讀取實際的?來檢索表中的列信息,即表示select使用了覆蓋索引而不必去回表查詢

  • using temporary(重點):數據庫需要創建?張臨時表來處理查詢,這種情況常見于order by和group by。出現這種情況?般是要進?優化的,?先是想到?索引來優化;

  • using where:數據庫將在存儲引擎檢索?后再進?過濾。就是先讀取整?數據,再按where 條件進?檢查,符合就留下,不符合就丟棄;

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

  • using sort_union(...), Using union(...), Using intersect(...):這些函數說明如何為index_merge聯接類型合并索引掃描;

  • using index for group-by:類似于訪問表的Using index?式,Using index for group-by表示數據庫發現了?個索引,可以?來查 詢group by或distinct查詢的所有列,?不要額外搜索硬盤訪問實際的表;

  • null:查詢的列未被索引覆蓋,并且where篩選條件是索引的前導列,意味著?到了索引,但是部分字段未被索引覆蓋,必須通過“回表”來實現,不是純粹地?到了索引,也不是完全沒?到索引,即使用了索引但需要回表操作,應該避免回表操作。

感謝各位的閱讀,以上就是“mysql執行計劃指的是什么”的內容了,經過本文的學習后,相信大家對mysql執行計劃指的是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

华蓥市| 手游| 曲麻莱县| 四会市| 泾川县| 高州市| 县级市| 永清县| 张家川| 花莲县| 屏东县| 福建省| 北票市| 廉江市| 海林市| 个旧市| 通化市| 宣威市| 商都县| 县级市| 农安县| 威信县| 前郭尔| 高邑县| 西华县| 南川市| 筠连县| 宜昌市| 玉山县| 普兰店市| 平乡县| 金湖县| 凌源市| 乌拉特中旗| 广汉市| 滕州市| 浮山县| 剑阁县| 五华县| 五常市| 万山特区|