婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 淺談mysql執行過程以及順序

淺談mysql執行過程以及順序

熱門標簽:催天下外呼系統 400電話辦理服務價格最實惠 呂梁外呼系統 南太平洋地圖標注 html地圖標注并導航 大豐地圖標注app 400電話變更申請 北京金倫外呼系統 武漢電銷機器人電話

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

一:mysql執行過程

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

1.1:連接器

連接器的主要職責就是:

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

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

③如果用戶的賬戶和密碼驗證通過,會在mysql自帶的權限表中查詢當前用戶的權限:

mysql中存在4個控制權限的表,分別為user表,db表,tables_priv表,columns_priv表,mysql權限表的驗證過程為:

1:User表:存放用戶賬戶信息以及全局級別(所有數據庫)權限,決定了來自哪些主機的哪些用戶可以訪問數據庫實例

  • Db表:存放數據庫級別的權限,決定了來自哪些主機的哪些用戶可以訪問此數據庫
  • Tables_priv表:存放表級別的權限,決定了來自哪些主機的哪些用戶可以訪問數據庫的這個表
  • Columns_priv表:存放列級別的權限,決定了來自哪些主機的哪些用戶可以訪問數據庫表的這個字段
  • Procs_priv表:存放存儲過程和函數級別的權限

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

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

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

1.2:緩存

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

1.3:分析器

分析器的主要作用是將客戶端發過來的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.

1.4:優化器

能夠進入到優化器階段表示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交給最后的執行器

1.5:執行器

在執行器的階段,此時會調用存儲引擎的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;

3.1:from

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

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

3.2: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相等的所有數據

3.3:where

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

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

3.4:group by

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

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

3.5:Having

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

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

3.6:select

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

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

3.7:Distinct

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

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

3.8:order by

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

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

3.9:limit

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

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

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

四:總結

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

到此這篇關于淺談mysql執行過程以及順序的文章就介紹到這了,更多相關mysql執行過程及順序內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • MySQL語句執行順序和編寫順序實例解析
  • mysql代碼執行結構實例分析【順序、分支、循環結構】
  • 簡單了解mysql語句書寫和執行順序
  • 簡單了解MySQL SELECT執行順序
  • 有關mysql中sql的執行順序的小問題
  • SQL語句執行深入講解(MySQL架構總覽->查詢執行流程->SQL解析順序)
  • sql和MySQL的語句執行順序分析

標簽:麗水 迪慶 徐州 自貢 南充 無錫 龍巖 西寧

巨人網絡通訊聲明:本文標題《淺談mysql執行過程以及順序》,本文關鍵詞  淺談,mysql,執行,過程,以及,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺談mysql執行過程以及順序》相關的同類信息!
  • 本頁收集關于淺談mysql執行過程以及順序的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    一区二区三区四区在线播放| 欧美丰满美乳xxx高潮www| 久久99精品国产麻豆婷婷洗澡| 国产在线精品免费| 欧美伊人久久久久久久久影院| 日韩午夜电影在线观看| 樱花影视一区二区| 国产美女精品在线| 日韩一区二区在线观看| 一区二区高清免费观看影视大全| 国产激情一区二区三区桃花岛亚洲| 欧美视频你懂的| 亚洲精品亚洲人成人网在线播放| 国产91色综合久久免费分享| 26uuu精品一区二区三区四区在线| 一区二区三区精品在线观看| 不卡视频免费播放| 国产三区在线成人av| 九九视频精品免费| 精品久久人人做人人爱| 久久99久久久久| 日韩一区二区三区四区五区六区| 五月激情综合色| 56国语精品自产拍在线观看| 亚洲a一区二区| av一本久道久久综合久久鬼色| 久久久久88色偷偷免费| 国产高清在线精品| 中文一区二区在线观看| 成人黄色av网站在线| 日本一区二区三区高清不卡| 成人不卡免费av| 亚洲欧洲在线观看av| 日本二三区不卡| 手机精品视频在线观看| 99综合影院在线| 91麻豆精品国产91| 国精产品一区一区三区mba桃花| 亚洲一区二区三区四区不卡| 成人午夜av电影| 中文字幕巨乱亚洲| 丁香六月综合激情| 亚洲码国产岛国毛片在线| 亚洲国产岛国毛片在线| 亚洲精品一区二区三区99| 国产乱子伦视频一区二区三区| 久久综合国产精品| 一本大道久久精品懂色aⅴ| 亚洲小少妇裸体bbw| 欧美性大战久久久久久久| 毛片一区二区三区| 国产亚洲欧美激情| 国产精品一品二品| 色诱亚洲精品久久久久久| 色乱码一区二区三区88| 亚洲国产精品一区二区久久 | 91老司机福利 在线| 亚洲综合激情网| 日韩一区二区电影| 激情综合色播激情啊| 亚洲精品一区二区三区香蕉 | 理论片日本一区| 欧美国产日韩a欧美在线观看 | 日本道精品一区二区三区| 日韩成人精品在线观看| 国产日韩欧美在线一区| 欧美日韩久久一区| 国产福利一区二区三区| 国模套图日韩精品一区二区| 色激情天天射综合网| 欧美日韩一区精品| 黄色日韩三级电影| 亚洲精品一区二区三区蜜桃下载| 91在线免费看| 日韩电影在线免费观看| 日韩精品一区二区三区在线播放| 粉嫩高潮美女一区二区三区| jlzzjlzz亚洲日本少妇| 日韩精品乱码免费| 国产日韩欧美激情| 日韩欧美一级二级| 精品视频在线免费观看| 国产白丝网站精品污在线入口| 亚洲黄色小说网站| 国产精品亲子伦对白| 国产精品美女久久久久久2018 | 亚洲成a人片在线观看中文| 国产精品久久久久一区二区三区 | 亚洲午夜一区二区| 成人91在线观看| 91精品国产aⅴ一区二区| 日本不卡免费在线视频| 天天色综合成人网| 精品福利二区三区| 福利视频网站一区二区三区| 国产午夜精品福利| 成人国产精品免费观看视频| 国产精品美女久久久久高潮| 奇米色一区二区| 日韩欧美一级精品久久| 欧美精品丝袜中出| 欧美精选一区二区| 亚洲成人av一区二区| 亚洲男人天堂av| 另类综合日韩欧美亚洲| 成人精品高清在线| 欧美午夜影院一区| 久久久久久久久蜜桃| 亚洲天堂久久久久久久| 奇米在线7777在线精品| 成人丝袜高跟foot| 欧美精品第1页| 国产乱码一区二区三区| 播五月开心婷婷综合| 日韩一区和二区| 亚洲国产中文字幕| 成人免费毛片app| 精品人在线二区三区| 午夜成人免费视频| 91视频观看视频| 久久综合色婷婷| 亚洲va国产天堂va久久en| av激情成人网| 欧美韩日一区二区三区| 国产一区二区三区不卡在线观看| 欧美久久一区二区| 亚洲精品国产品国语在线app| 东方aⅴ免费观看久久av| 久久亚洲影视婷婷| 国产精品羞羞答答xxdd| 欧美成人一区二区| 免费成人在线视频观看| 欧美日韩一区久久| 亚洲国产va精品久久久不卡综合| 99久久精品一区二区| 国产精品日韩精品欧美在线| 国产a久久麻豆| 国产精品国产三级国产有无不卡| 国产成人午夜精品5599| 国产偷国产偷精品高清尤物 | 国产精品国产三级国产普通话蜜臀 | 国产一区二区不卡| 精品成a人在线观看| 国产精品中文字幕一区二区三区| 欧美mv日韩mv国产网站| 精品一区二区三区视频在线观看| 日韩一区二区三免费高清| 久久精品国产一区二区三| 91麻豆精品国产91久久久久久久久| 午夜精品福利视频网站| 在线播放一区二区三区| 日韩精品91亚洲二区在线观看| 欧美午夜宅男影院| 美女精品一区二区| 久久精品亚洲麻豆av一区二区| 国产精品1区二区.| 亚洲视频在线观看三级| 欧美另类一区二区三区| 天堂精品中文字幕在线| 欧美大片日本大片免费观看| 成人亚洲一区二区一| 综合久久综合久久| 欧美一级片在线| 高清国产一区二区| 亚洲女人****多毛耸耸8| 91精品国产色综合久久ai换脸 | 久久精品国产成人一区二区三区| 欧美精品一区二区三区久久久 | 波波电影院一区二区三区| 一区二区久久久久| 日韩一卡二卡三卡| 成人h精品动漫一区二区三区| 亚洲精品免费在线观看| 精品日韩在线一区| 色综合色综合色综合| 秋霞影院一区二区| 国产精品国产精品国产专区不蜜 | 日韩欧美另类在线| 91年精品国产| 九九国产精品视频| 洋洋av久久久久久久一区| 欧美成人精品高清在线播放| 91女神在线视频| 国产一区视频导航| 亚洲成人一区二区| 一区在线播放视频| 国产欧美日韩在线观看| 欧美一区二区视频在线观看 | 亚洲h动漫在线| 国产精品免费免费| 亚洲精品一区二区三区99| 欧美日韩另类一区| 色综合天天综合狠狠| 国产成人亚洲综合a∨婷婷图片 | 久久综合成人精品亚洲另类欧美| 色综合色狠狠天天综合色| 从欧美一区二区三区| 卡一卡二国产精品| 男人的天堂亚洲一区| 夜色激情一区二区|