精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深入理解MySQL執行過程及執行順序

運維 數據庫運維
因為學習和了解MySQL是至關重要的,那么當我們在客戶端發起一個SQL到出現詳細的查詢數據,這其中究竟經歷了什么樣的過程?

 MySQL在我們的開發中基本每天都要面對的,作為開發中的數據的來源,MySQL承擔者存儲數據和讀寫數據的職責。因為學習和了解MySQL是至關重要的,那么當我們在客戶端發起一個SQL到出現詳細的查詢數據,這其中究竟經歷了什么樣的過程?MySQL服務端是如何處理請求的,又是如何執行SQL語句的?本篇博客將來探討這些問題。

MySQL執行過程

MySQL整體的執行過程如下圖所示:

連接器

連接器的主要職責就是:

1、負責與客戶端的通信,是半雙工模式,這就意味著某一固定時刻只能由客戶端向服務器請求或者服務器向客戶端發送數據,而不能同時進行,其中MySQL在與客戶端連接TC/IP的。

2、驗證請求用戶的賬戶和密碼是否正確,如果賬戶和密碼錯誤,會報錯:Access denied for user 'root'@'localhost' (using password: YES)

3、如果用戶的賬戶和密碼驗證通過,會在MySQL自帶的權限表中查詢當前用戶的權限。

MySQL中存在4個控制權限的表,分別為user表,db表,tables_priv表,columns_priv表:

  • user表:存放用戶賬戶信息以及全局級別(所有數據庫)權限,決定了來自哪些主機的哪些用戶可以訪問數據庫實例
  • db表:存放數據庫級別的權限,決定了來自哪些主機的哪些用戶可以訪問此數據庫
  • tables_priv表:存放表級別的權限,決定了來自哪些主機的哪些用戶可以訪問數據庫的這個表
  • columns_priv表:存放列級別的權限,決定了來自哪些主機的哪些用戶可以訪問數據庫表的這個字段

MySQL權限表的驗證過程為:

1、 先從user表中的Host,User,Password這3個字段中判斷連接的IP、用戶名、密碼是否存在,存在則通過驗證。

2、通過身份認證后,進行權限分配,按照user,db,tables_priv,columns_priv的順序進行驗證。即先檢查全局權限表user,如果user中對應的權限為Y,則此用戶對所有數據庫的權限都為Y,將不再檢查db,tables_priv,columns_priv;如果為N,則到db表中檢查此用戶對應的具體數據庫,并得到db中為Y的權限;如果db中為N,則檢查tables_priv中此數據庫對應的具體表,取得表中的權限Y,以此類推。

3、如果在任何一個過程中權限驗證不通過,都會報錯。

緩存

MySQL的緩存主要的作用是為了提升查詢的效率,緩存以key和value的哈希表形式存儲,key是具體的SQL語句,value是結果的集合。如果無法命中緩存,就繼續走到分析器的這一步,如果命中緩存就直接返回給客戶端。不過需要注意的是在MySQL的8.0版本以后,緩存被官方刪除掉了。之所以刪除掉,是因為查詢緩存的失效非常頻繁,如果在一個寫多讀少的環境中,緩存會頻繁的新增和失效。對于某些更新壓力大的數據庫來說,查詢緩存的命中率會非常低,MySQL為了維護緩存可能會出現一定的伸縮性的問題,目前在5.6的版本中已經默認關閉了,比較推薦的一種做法是將緩存放在客戶端,性能大概會提升5倍左右。

分析器

分析器的主要作用是將客戶端發過來的SQL語句進行分析,這將包括預處理與解析過程,在這個階段會解析SQL語句的語義,并進行關鍵詞和非關鍵詞進行提取、解析,并組成一個解析樹。具體的關鍵詞包括不限定于以下:select/update/delete/or/in/where/group by/having/count/limit等。如果分析到語法錯誤,會直接給客戶端拋出異常:“ERROR:You have an error in your SQL syntax.”。

比如:select * from user where userId =1234;

在分析器中就通過語義規則器將select from where這些關鍵詞提取和匹配出來,MySQL會自動判斷關鍵詞和非關鍵詞,將用戶的匹配字段和自定義語句識別出來。這個階段也會做一些校驗:比如校驗當前數據庫是否存在user表,同時假如user表中不存在userId這個字段同樣會報錯:“unknown column in field list.”。

優化器

能夠進入到優化器階段表示SQL是符合MySQL的標準語義規則的并且可以執行的,此階段主要是進行SQL語句的優化,會根據執行計劃進行最優的選擇,匹配合適的索引,選擇最佳的執行方案。比如一個典型的例子是這樣的:

表T,對A、B、C列建立聯合索引,在進行查詢的時候,當SQL查詢到的結果是:select xx where B=x and A=x and C=x,很多人會以為是用不到索引的,但其實會用到,雖然索引必須符合最左原則才能使用,但是本質上,優化器會自動將這條SQL優化為:where A=x and B=x and C=X,這種優化會為了底層能夠匹配到索引,同時在這個階段是自動按照執行計劃進行預處理,MySQL會計算各個執行方法的最佳時間,最終確定一條執行的SQL交給最后的執行器。

執行器

在執行器的階段,此時會調用存儲引擎的API,API會調用存儲引擎,主要有一下存儲的引擎,不過常用的還是myisam和innodb:

引擎以前的名字叫做:表處理器(其實這個名字我覺得更能表達它存在的意義)負責對具體的數據文件進行操作,對SQL的語義比如select或者update進行分析,執行具體的操作。在執行完以后會將具體的操作記錄到binlog中,需要注意的一點是:select不會記錄到binlog中,只有update/delete/insert才會記錄到binlog中。而update會采用兩階段提交的方式,記錄都redolog中。

執行的狀態

可以通過命令:show full processlist,展示所有的處理進程,主要包含了以下的狀態,表示服務器處理客戶端的狀態,狀態包含了從客戶端發起請求到后臺服務器處理的過程,包括加鎖的過程、統計存儲引擎的信息,排序數據、搜索中間表、發送數據等。囊括了所有的MySQL的所有狀態,其中具體的含義如下圖:

SQL的執行順序

事實上,SQL并不是按照我們的書寫順序來從前往后、左往右依次執行的,它是按照固定的順序解析的,主要的作用就是從上一個階段的執行返回結果來提供給下一階段使用,SQL在執行的過程中會有不同的臨時中間表,一般是按照如下順序:

例子:select distinct s.id from T t join S s on t.id=s.id where t.name="Yrion" group by t.mobile having count(*)>2 order by s.create_time limit 5;

from

第一步就是選擇出from關鍵詞后面跟的表,這也是SQL執行的第一步:表示要從數據庫中執行哪張表。

實例說明:在這個例子中就是首先從數據庫中找到表T。

join on

join是表示要關聯的表,on是連接的條件。通過from和join on選擇出需要執行的數據庫表T和S,產生笛卡爾積,生成T和S合并的臨時中間表Temp1。on:確定表的綁定關系,通過on產生臨時中間表Temp2。

實例說明:找到表S,生成臨時中間表Temp1,然后找到表T的id和S的id相同的部分組成成表Temp2,Temp2里面包含著T和Sid相等的所有數據。

where

where表示篩選,根據where后面的條件進行過濾,按照指定的字段的值(如果有and連接符會進行聯合篩選)從臨時中間表Temp2中篩選需要的數據,注意如果在此階段找不到數據,會直接返回客戶端,不會往下進行。這個過程會生成一個臨時中間表Temp3。注意:在where中不可以使用聚合函數,聚合函數主要是(min\max\count\sum等函數)。

實例說明:在temp2臨時表集合中找到T表的name="Yrion"的數據,找到數據后會成臨時中間表Temp3,T。emp3里包含name列為"Yrion"的所有表數據

group by

group by是進行分組,對where條件過濾后的臨時表Temp3按照固定的字段進行分組,產生臨時中間表Temp4,這個過程只是數據的順序發生改變,而數據總量不會變化,表中的數據以組的形式存在。

實例說明:在Temp3表數據中對mobile進行分組,查找出mobile一樣的數據,然后放到一起,產生Temp4臨時表。

Having

對臨時中間表Temp4進行聚合,這里可以為count等計數,然后產生中間表Temp5,在此階段可以使用select中的別名。

實例說明:在Temp4臨時表中找出條數大于2的數據,如果小于2直接被舍棄掉,然后生成臨時中間表Temp5。

select

對分組聚合完的表挑選出需要查詢的數據,如果為*會解析為所有數據,此時會產生中間表Temp6。

實例說明:在此階段就是對Temp5臨時聚合表中S表中的id進行篩選產生Temp6,此時Temp6就只包含有s表的id列數據,并且name="Yrion",通過mobile分組數量大于2的數據。

Distinct

Distinct對所有的數據進行去重,此時如果有min、max函數會執行字段函數計算,然后產生臨時表Temp7。

實例說明:此階段對Temp5中的數據進行去重,引擎API會調用去重函數進行數據的過濾,最終只保留id第一次出現的那條數據,然后產生臨時中間表Temp7。

order by

會根據Temp7進行順序排列或者逆序排列,然后插入臨時中間表Temp8,這個過程比較耗費資源。

實例說明:這段會將所有Temp7臨時表中的數據按照創建時間(create_time)進行排序,這個過程也不會有列或者行損失。

limit

limit對中間表Temp8進行分頁,產生臨時中間表Temp9,返回給客戶端。

實例說明:在Temp7中排好序的數據,然后取前五條插入到Temp9這個臨時表中,最終返回給客戶端。

PS:實際上這個過程也并不是絕對這樣的,中間MySQL會有部分的優化以達到最佳的優化效果,比如在select篩選出找到的數據集。

總結

本篇博客總結了MySQL的執行過程,以及SQL的執行順序,理解這些有助于我們對SQL語句進行優化,以及明白MySQL中的SQL語句從寫出來到最終執行的軌跡,有助于我們對SQL有比較深入和細致的理解,提高我們的數據庫理解能力。同時,對于復雜SQL的執行過程、編寫都會有一定程度的意義。

 

責任編輯:張燕妮 來源: DockOne
相關推薦

2021-04-20 23:25:16

執行函數變量

2020-07-24 10:00:00

JavaScript執行上下文前端

2019-03-14 08:00:00

JavaScript執行棧前端

2025-05-06 00:43:00

MySQL日志文件MIXED 3

2025-01-09 10:49:05

2017-05-04 16:35:45

2015-03-17 09:44:08

2016-12-08 15:36:59

HashMap數據結構hash函數

2020-07-21 08:26:08

SpringSecurity過濾器

2010-06-01 15:25:27

JavaCLASSPATH

2009-04-18 10:46:30

IP路由選擇

2020-03-26 16:40:07

MySQL索引數據庫

2018-09-21 16:13:01

數據庫MySQLSQL

2020-03-17 08:36:22

數據庫存儲Mysql

2023-10-13 13:30:00

MySQL鎖機制

2021-09-28 13:32:24

innoDB架構MySQL

2024-10-28 08:28:59

2009-09-25 09:14:35

Hibernate日志

2021-02-17 11:25:33

前端JavaScriptthis

2023-10-19 11:12:15

Netty代碼
點贊
收藏

51CTO技術棧公眾號

在线免费一区二区| 免费看黄色一级大片| 性猛交xxxx| 日韩成人一级大片| 久久精品视频中文字幕| ass极品水嫩小美女ass| 夜夜嗨av一区二区三区四区| 成人免费播放器| 精品电影在线| 国产一区福利在线| 91福利视频在线观看| 成年人看的免费视频| 欧美日本三级| 色婷婷久久久久swag精品| 国产91av视频在线观看| 人妻精品一区二区三区| 免费观看在线色综合| 国产精品国产三级国产普通话三级| 成人黄色短视频在线观看 | 成人一区二区三区视频| 亚洲一级黄色片| 欧美日韩一道本| 1pondo在线播放免费| 成人福利视频在线看| 国产成人一区二区三区小说| 久久久国产成人| 成人短片线上看| 亚洲国产小视频| 精品国产乱码久久久久久1区二区| 日本不卡1234视频| 一区二区三区四区蜜桃 | 欧美电影免费播放| 亚洲激情小视频| 久久无码人妻一区二区三区| 高清电影一区| 欧美视频在线视频| 久艹在线免费观看| 美足av综合网| 亚洲女同ⅹxx女同tv| 亚洲综合首页| 午夜免费福利在线观看| 国产视频在线观看一区二区三区 | 男人的天堂a在线| 久久99蜜桃精品| 国产精品第一第二| 日韩在线播放中文字幕| 亚洲男女自偷自拍| 欧美一级淫片播放口| 国产精品第56页| 亚洲福利电影| 欧美极品美女电影一区| 精品国产欧美日韩不卡在线观看| 久久免费av| 国产亚洲精品综合一区91| 美国黄色一级毛片| 日韩一级电影| 亚洲女同性videos| 99久久人妻无码精品系列| 台湾佬综合网| 亚洲欧洲第一视频| 免费污网站在线观看| 竹菊久久久久久久| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 中文字幕欧美日韩精品| 国产精品理论在线| 91亚洲国产| 久色乳综合思思在线视频| 国产探花在线免费观看| 欧美日韩日本国产亚洲在线| 欧美人与性动交a欧美精品| 久久久精品人妻一区二区三区四| 在线播放亚洲| 欧美一级bbbbb性bbbb喷潮片| av大片免费观看| 久久综合图片| 久久精品国产2020观看福利| 91人妻一区二区三区蜜臀| 综合激情在线| 久久久久久久久久国产| 日本免费观看视| 丝袜亚洲另类欧美| 91精品久久久久久久久青青| 国产成人av免费看| 99久久久国产精品| 日韩在线导航| 在线播放蜜桃麻豆| 天天免费综合色| 91福利国产成人精品播放| 久久久精品区| 亚洲欧美日韩视频一区| 久久久久久久久久97| 亚洲国产黄色| 国产剧情久久久久久| 亚洲精品视频专区| 国产亚洲欧美在线| 国产视频在线观看网站| 日韩免费电影| 日韩午夜在线观看视频| 成人性生交大免费看| 欧美a级片视频| 久久久久久高潮国产精品视| 午夜精品一区二| 国产精品一区2区| 欧美日韩国产一二| 女同一区二区免费aⅴ| 91成人网在线| 中文字幕三级电影| 希岛爱理av一区二区三区| 国内精品视频一区| 国产又大又黑又粗| 久久久国产精品午夜一区ai换脸| 亚洲一卡二卡三卡四卡无卡网站在线看| 色综合999| 欧美日韩精品免费| 久久精品国产亚洲av麻豆| 欧美日韩国产在线一区| 国产精品久久久| 手机亚洲第一页| 一区二区三区**美女毛片| 欧美成人黄色网址| 亚洲区小说区图片区qvod按摩| 久久成人精品一区二区三区| 成人小视频在线播放| av不卡在线播放| 久久www视频| 91精品视频一区二区| 国产亚洲精品成人av久久ww| 日韩三级视频在线| 成人晚上爱看视频| 超碰超碰超碰超碰超碰| 欧美综合影院| 中文日韩电影网站| 亚洲中文字幕无码爆乳av| 99精品国产热久久91蜜凸| 国产精品无码电影在线观看| 成人国产精品一区二区网站| 日韩网站免费观看| 中文字幕免费观看视频| 国产日韩精品一区二区浪潮av | 日韩av电影天堂| 欧美日韩在线一二三| 日韩电影毛片| 亚洲精品视频免费在线观看| 国产精品第一页在线观看| 高清日韩电视剧大全免费| 红桃一区二区三区| 国产精品亚洲四区在线观看| 久久精品国亚洲| 国产精品欧美亚洲| 最新成人av在线| 做a视频在线观看| 91精品国产自产拍在线观看蜜| 国产日韩欧美在线| gogo在线高清视频| 日韩网站在线看片你懂的| 欧美人妻一区二区| 成人成人成人在线视频| 国产日本在线播放| 日韩欧美美女在线观看| 日韩免费中文字幕| 99免在线观看免费视频高清| 欧美日韩欧美一区二区| 欧美做爰啪啪xxxⅹ性| 国产精品一区二区三区网站| 国产精品自拍合集| 久久精品亚洲成在人线av网址| 久久欧美在线电影| 亚洲三区在线观看无套内射| 在线亚洲一区二区| 久久嫩草捆绑紧缚| 国产91丝袜在线播放九色| 国产69精品久久久久999小说| 群体交乱之放荡娇妻一区二区| 国产97人人超碰caoprom| 91se在线| 精品国产乱码久久久久久1区2区| 1级黄色大片儿| 日本一区二区成人| 亚洲国产日韩在线一区| 国产一区二区精品| 亚洲开发第一视频在线播放| 天堂久久av| 欧美在线日韩在线| 日本成人在线播放| 亚洲国产精品人人爽夜夜爽| 高潮毛片又色又爽免费 | 大尺度一区二区| 99爱视频在线| 香港欧美日韩三级黄色一级电影网站| 超碰在线97av| 国产成人精品亚洲日本在线观看| 久久精品国亚洲| 男人天堂网在线| 91精品国产综合久久久久| 91精品国产乱码在线观看| 国产精品久久久久毛片软件| 亚洲女则毛耸耸bbw| 日韩精品成人一区二区三区| 91免费国产精品| 精品国产欧美日韩| 狠狠综合久久av| 亚洲精品成a人ⅴ香蕉片| 26uuu日韩精品一区二区| av电影高清在线观看| 亚洲视频在线播放| 空姐吹箫视频大全| 欧美日韩成人一区| 日本中文在线播放| 亚洲综合激情另类小说区| 成人在线手机视频| 99国产欧美久久久精品| 亚洲成人激情小说| 美女爽到高潮91| 男人亚洲天堂网| 伊人成人在线| 国产欧美自拍视频| 久久综合电影| 日韩和欧美的一区二区| 美国十次av导航亚洲入口| 亚洲最大福利视频网| 国产亚洲人成a在线v网站 | 成年人免费观看视频网站| 国产69精品久久久久毛片 | 国产成人无码av| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲欧美日韩久久精品| 国产伦理片在线观看| 99精品欧美一区二区三区小说| 成年人看片网站| 国产一区二区三区不卡在线观看| 男人女人黄一级| 久久精品盗摄| 欧美成人xxxxx| 在线亚洲一区| 欧美老熟妇喷水| 99在线|亚洲一区二区| 美女av免费观看| 综合天堂久久久久久久| 大桥未久一区二区| 99热在线成人| 伊人久久大香线蕉精品| 日韩在线不卡| 夜夜爽www精品| 99精品小视频| 亚洲自拍偷拍一区二区三区| 三上亚洲一区二区| 一区二区三区四区五区视频| 欧美日韩水蜜桃| 亚洲高清在线观看一区| 日韩精品欧美| aaa免费在线观看| 欧美在线视屏| 18黄暴禁片在线观看| 亚洲午夜伦理| 欧美 日韩 国产 高清| 亚洲日韩成人| 波多野结衣家庭教师视频| 美女网站久久| 国产一二三区av| 国产在线日韩欧美| 日本黄色大片在线观看| 国产福利一区二区| 好男人香蕉影院| 久久伊人蜜桃av一区二区| 97人妻人人揉人人躁人人| 国产精品久久福利| 少妇久久久久久被弄高潮| 亚洲午夜国产一区99re久久| 国产精品第9页| 91官网在线免费观看| ,亚洲人成毛片在线播放| 51精品秘密在线观看| 好男人在线视频www| 日韩精品免费综合视频在线播放| 国产午夜视频在线观看| 精品国产一区二区三区四区在线观看| 18在线观看的| 91高清免费视频| 成人黄色在线| 成人xxxxx色| 国产综合久久久| 欧美另类videos| 99精品国产99久久久久久福利| 黄色av免费在线播放| 蜜桃av一区二区三区电影| 99riav国产精品视频| 久久久久久99精品| 91日韩中文字幕| 色噜噜久久综合| 99久久99久久久精品棕色圆| 亚洲激情第一页| 久cao在线| 日本精品中文字幕| 人人爱人人干婷婷丁香亚洲| 欧美成ee人免费视频| 91国语精品自产拍| 国产精品亚洲a| 国产成人丝袜美腿| 美国黄色特级片| 午夜天堂影视香蕉久久| 中文字幕永久在线观看| 亚洲精品ady| 成人在线观看亚洲| 国产成人精品av在线| 6080成人| 一区二区三区四区| 久久成人亚洲| 日本性生活一级片| 国产精品成人一区二区艾草| 91视频免费网址| 日韩一区二区精品在线观看| 国产黄色免费在线观看| 91成人性视频| 国产精品x8x8一区二区| 黑人巨大国产9丨视频| 秋霞午夜av一区二区三区| 中文字幕影片免费在线观看| 亚洲女人****多毛耸耸8| 欧美性猛交xxxx乱大交hd| 亚洲国产91色在线| av免费在线免费观看| 国产精品免费电影| 久久99国产成人小视频| 欧美乱大交xxxxx潮喷l头像| 国产精品中文字幕日韩精品| 色www亚洲国产阿娇yao| 色av成人天堂桃色av| 天堂在线中文| 97视频在线观看视频免费视频 | 亚洲精品永久免费视频| 草莓视频一区| 欧美天天在线| 国产男女无遮挡猛进猛出| 国产精品夫妻自拍| 中文字幕人妻一区二区在线视频| 亚洲精品视频在线播放| 蜜桃av.网站在线观看| 国产伦精品一区二区三区高清| 在线观看国产精品入口| 亚洲图色中文字幕| 国产精品久久久久久久蜜臀| 中文在线a天堂| 色琪琪综合男人的天堂aⅴ视频| 日本一区二区三区四区| 日韩中文字幕二区| 不卡一二三区| 久久国产精品久久| 亚洲精品一二| 黄色污在线观看| 午夜激情久久久| 少妇av一区二区| 26uuu国产精品视频| 青青草久久爱| 超碰网在线观看| 国产日韩欧美制服另类| 看黄色一级大片| 中文字幕亚洲自拍| 只有精品亚洲| 成年人视频大全| 成人网在线免费视频| 日韩久久久久久久久| 亚洲欧洲三级电影| 一本色道久久综合无码人妻| 久久精品久久久久| 亚洲一区二区电影| 成熟丰满熟妇高潮xxxxx视频| 2020国产精品久久精品美国| 日韩免费av网站| www.日韩.com| 亚洲超碰在线观看| 无码精品a∨在线观看中文| 国产亚洲欧美一区在线观看| 中文字幕日产av| 久久国产精品视频| 欧美大片网址| 激情五月婷婷久久| 成人欧美一区二区三区白人| 朝桐光av在线一区二区三区| 欧美在线xxx| 天天综合国产| 久久性爱视频网站| 在线观看日韩电影| 在线免费av导航| 欧美精品123| 国内精品久久久久影院一蜜桃| 久久久久久天堂| 国产午夜精品全部视频在线播放| 日本在线一区二区| 自慰无码一区二区三区| 国产精品久久夜| 天堂国产一区二区三区| 国产精品久久久久久久一区探花 | 欧美日韩综合在线观看| 永久免费看mv网站入口亚洲| 一区二区三区高清在线观看| 国产1区2区在线| 一区二区免费在线| 成人高清免费在线播放| 成人18视频| 久久99精品国产麻豆婷婷|