<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          面試官問:select語句的執(zhí)行流程是?可以畫圖嗎?

          共 1286字,需瀏覽 3分鐘

           ·

          2020-08-21 09:50



          起因


          大家好,我是一條SQL,大家經(jīng)常用我來做增刪改查,有一次,我聽面試官問一個(gè)面試者,你知道sql語句執(zhí)行的過程嗎?

          答:先寫一條SQL語句,然后連接到服務(wù)端,服務(wù)端執(zhí)行SQL,返回結(jié)果給我們。

          最后,這個(gè)面試官讓他回家等通知了。

          其實(shí),為了返回一條數(shù)據(jù)給業(yè)務(wù),我做了很多事情,我先來帶大家認(rèn)識(shí)一下我的組成吧。

          一般從整體來說MySQL分為Server層和存儲(chǔ)引擎層。

          Server層,這一層的是跨引擎的,像存儲(chǔ)過程、觸發(fā)器、視圖等。


          存儲(chǔ)引擎層,從名字可以聽出來,沒錯(cuò),就是存取數(shù)據(jù)的。當(dāng)然它的分類也是很多滴,下圖展示部分,還有更多的引擎,但是不常用。


          還有一些其他隊(duì)的存儲(chǔ)引擎就不一一列舉了,一般來說我們聽過比較多的有InnoDB、MEMORY、MyISAM,InnoDB最常用。當(dāng)你不指定時(shí),默認(rèn)引擎就是InnoDB,當(dāng)然如果需要指定,直接命令來指定,例如: ENGINE =?引擎名稱。

          ?CREATE?TABLE?TABLE_NAME
          (
          ...
          )?ENGINE=INNODB

          到了關(guān)鍵環(huán)節(jié)了,大家不是很關(guān)心我的工作流程問題嘛,下面一張圖,就是我的工作時(shí)要做的一些事情,還不少吧。

          mysql執(zhí)行圖

          首先,要先執(zhí)行我,需要先連接的數(shù)據(jù)庫,我會(huì)先走連接器,驗(yàn)證好賬號(hào)密碼正確后,我就可以去緩存區(qū)看是不是存在的,如果緩存里面有,那我工作量就少了,如果我有權(quán)限的話就會(huì)把結(jié)果直接給客戶端。

          如果緩存查不到,我就會(huì)去分析器了,在這里對(duì)我進(jìn)行詞法分析,如果不符合SQL的詞法,就會(huì)返回錯(cuò)誤。

          通過詞法驗(yàn)證后,接下來就會(huì)對(duì)我做語法分析,不符合要求,直接返回錯(cuò)誤。符合要求,我被解析成語法解析樹。

          接下來就要進(jìn)入優(yōu)化器了,優(yōu)化器會(huì)根據(jù)自己的判斷,來做決定如何優(yōu)化,比如如何選擇索引或者聯(lián)表查詢時(shí)先去查哪個(gè)表。所以,有的時(shí)候即使程序員指定了一些索引,我依然不會(huì)用,我表示我有自己的想法

          然后我?guī)е鴥?yōu)化方案,走向執(zhí)行器,先讓人看看我有沒有這個(gè)權(quán)限執(zhí)行,檢查完事,執(zhí)行器就會(huì)調(diào)用對(duì)應(yīng)的引擎接口,依次的把符合條件的數(shù)據(jù)裝進(jìn)結(jié)果集。同時(shí),還會(huì)把結(jié)果存到緩存中,最后把結(jié)果集返回客戶端就完事了。

          大家可以結(jié)合圖,看一下,總體下來還是挺簡(jiǎn)單的。

          參考

          官網(wǎng)? https://www.mysql.com/cn
          《深入淺出MySQL》
          拉鉤 《高性能MySQL實(shí)戰(zhàn)》
          極客時(shí)間 《MySQL實(shí)戰(zhàn)45講》

          最后

          很早前寫的草稿,一直沒發(fā),今天發(fā)出來,如有不足,請(qǐng)大家賜教。和小伙伴們一起學(xué)習(xí),?持續(xù)更新中。。。

          另外,mysql執(zhí)行圖弄了15種樣式,如果大家想看一個(gè)自己覺得比較舒服的版本,可以加小編的微信來要圖。


          加我微信回復(fù)"mysql執(zhí)行圖"即可

          1.??Docker 禁止被列入美國“實(shí)體名單”的國家、企業(yè)、個(gè)人使用

          2.??SpringBoot幾種定時(shí)任務(wù)的實(shí)現(xiàn)方式


          原創(chuàng)不易,在看吧!

          瀏覽 60
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91极品视觉盛宴 | 人人草人人玩 | 开心五月丁香五月 | 影音先锋啪 | 欧美精品成人网站在线观看 |