<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>

          一條SQL的奇妙旅行

          共 11980字,需瀏覽 24分鐘

           ·

          2020-09-12 18:59

          VOL 157

          10

          2020-09

          今天距2021年112天

          這是ITester軟件測(cè)試小棧第157次推文

          點(diǎn)擊上方藍(lán)字“ITester軟件測(cè)試小棧“關(guān)注我,每周一五早上 08:30準(zhǔn)時(shí)推送,每月不定期贈(zèng)送技術(shù)書籍


          微信公眾號(hào)后臺(tái)回復(fù)“資源測(cè)試工具包”領(lǐng)取測(cè)試資源,回復(fù)“微信群”一起進(jìn)群打怪。


          本文2006字,閱讀約需6分鐘





          工作中我們經(jīng)常查詢數(shù)據(jù)庫,用一個(gè)查詢,得到想要的數(shù)據(jù)。可有想過,我們得到答案經(jīng)過了哪些磨難?經(jīng)歷了哪些誘惑?


          以下將以一條SQL的執(zhí)行過程來了解 MySQL 整體架構(gòu),對(duì)MySQL有一個(gè)全面,清晰的認(rèn)知,F(xiàn)or造航母。



          開始旅行

          第1關(guān)

            連接器

          客戶端發(fā)送一條查詢給服務(wù)器,包含客戶端相關(guān)信息(IP、用戶、密碼),服務(wù)器完成驗(yàn)證。



          報(bào)告太君,自己人,可以放行! 




          第2關(guān)

            查詢緩存

          執(zhí)行查詢語句的時(shí)候,會(huì)先查詢緩存,我們會(huì)發(fā)現(xiàn)某個(gè)查詢,查詢第二次的時(shí)候非常快便是這個(gè)原因(MySQL8.0 廢除這個(gè)功能,太雞肋)。

          ......





          第3關(guān)

            解析器

          第一步:解析你的語法,主要是關(guān)鍵字;



          單詞別寫錯(cuò)了,寫錯(cuò)了,我可不會(huì)干活。


          第二步:解析涉及到的對(duì)象是否存在;

          人都沒有,跟空氣聊個(gè)啥呢?




          第三步:涉及到的對(duì)象用戶是否有對(duì)應(yīng)的權(quán)限。



          哎呀,不給錢就不給看,不給看。




          第4關(guān)

            優(yōu)化器


          當(dāng)語法與語義都沒有問題權(quán)限也匹配,此時(shí)數(shù)據(jù)庫便開始真正為你服務(wù)了,根據(jù)一定得算法規(guī)則,對(duì)你的查詢進(jìn)行優(yōu)化,尋找最優(yōu)的執(zhí)行計(jì)劃。

          國家分配的跟自己找的肯定還是不一樣的,多數(shù)情況下,還是自己找的好。






          第5關(guān)

            執(zhí)行

          先判斷數(shù)據(jù)是否在緩沖池中,若在,直接返回,若不在,則先從磁盤文件中加載到內(nèi)存。



          嘻嘻,反正今天要定了。



          第6關(guān)

            數(shù)據(jù)返回

          數(shù)據(jù)返回是一邊查詢,一邊返回,并不是一次返回,雖然看上去是一下突然返回的。

          BTW,你看見的不一定是真的。



          旅行圖如下:



          MySQL體系結(jié)構(gòu)


          最外層客戶端:各種語言API連接數(shù)據(jù)庫。



          第1層

            連接層

          包含連接池,身份驗(yàn)證,查詢緩存。




          第2層

          核心服務(wù)層

          解析器,優(yōu)化器,跨存儲(chǔ)引擎的函數(shù),存儲(chǔ)過程,觸發(fā)器,視圖,SQL接口,管理服務(wù)工具組件。



          第3層

           存儲(chǔ)引擎層

          不同存儲(chǔ)引擎即數(shù)據(jù)的存取方式不同。



          第4層

           文件系統(tǒng)

          文件系統(tǒng),底層存儲(chǔ)數(shù)據(jù)的磁盤。


          MySQL體系架構(gòu)圖如下:




          InnoDB存儲(chǔ)引擎三大特性



          特性1

           自適應(yīng)hash索引

            

          B+樹的高度一般為3~4層,故需要3~4次的查詢,如果觀察到建立哈希索引可以帶來速度提升,則建立哈希索引,稱之為自適應(yīng)哈希索引(Adaptive Hash Index,AHI) AHI是通過緩沖池的B+樹頁構(gòu)造而來,因此建立的速度很快,而且不需要對(duì)整張表構(gòu)建哈希索引。InnoDB存儲(chǔ)引擎會(huì)自動(dòng)根據(jù)訪問的頻率和模式來自動(dòng)地為某些熱點(diǎn)頁建立哈希索引 --來自INNODB 技術(shù)內(nèi)幕(人工智能趕腳有沒有)。


          缺點(diǎn): 跟普通索引一樣需要額外開銷維護(hù)。




          特性2

           插入緩沖

            

          對(duì)于非聚集類索引的插入和更新操作,不是每一次都直接插入到索引頁中,而是先插入到內(nèi)存中。具體做法是:如果該索引頁在緩沖池中,直接插入;否則,先將其放入插入緩沖區(qū)中,再以一定的頻率和索引頁合并,這時(shí),就可以將同一個(gè)索引頁中的多個(gè)插入合并到一個(gè)IO操作中,大大提高寫性能(一定是非聚集索引)

           

          缺點(diǎn):可能導(dǎo)致數(shù)據(jù)庫宕機(jī)后實(shí)例恢復(fù)時(shí)間變長,占用太多緩沖池內(nèi)存。



          特性3

          雙寫

            

          當(dāng)MySQL將臟數(shù)據(jù)flush到data file的時(shí)候, 先使用memcopy 將臟數(shù)據(jù)復(fù)制到內(nèi)存中的double write buffer ,通過double write buffer再分2次,每次寫入1MB到共享表空間,然后馬上調(diào)用fsync函數(shù),同步到磁盤上,避免緩沖帶來的問題(前倆個(gè)是提升性能,雙寫主要保證數(shù)據(jù)頁的可用性)。


          InnoDB存儲(chǔ)引擎內(nèi)存結(jié)構(gòu)圖如下:




          今日問題
          你知道MySQL索引的用途,以及主鍵索引與二級(jí)索引的區(qū)別是什么嗎? 
          (歡迎在下方留言區(qū)發(fā)表你的看法)



          以上

          That‘s all
          更多系列文章
          敬請(qǐng)期待

          ITester軟件測(cè)試小棧
          往期內(nèi)容寵幸


          1.Python接口自動(dòng)化-接口基礎(chǔ)(一)

          2.Python接口自動(dòng)化-接口基礎(chǔ)(二)


          3.Python接口自動(dòng)化-requests模塊之get請(qǐng)求


          4.Python接口自動(dòng)化-requests模塊之post請(qǐng)求

          5.Python接口自動(dòng)化之cookie、session應(yīng)用


          6.Python接口自動(dòng)化之Token詳解及應(yīng)用


          7.Python接口自動(dòng)化之requests請(qǐng)求封裝


          8.Python接口自動(dòng)化之pymysql數(shù)據(jù)庫操作


          9.Python接口自動(dòng)化之logging日志


          10.Python接口自動(dòng)化之logging封裝及實(shí)戰(zhàn)

          想獲取更多最新干貨內(nèi)容
          快來星標(biāo) 置頂 關(guān)注
          每周一、三、五 08:30見

          <<  滑動(dòng)查看下一張圖片  >>


           后臺(tái) 回復(fù)"資源"取干貨
          回復(fù)"微信群"一起打怪升級(jí)

          個(gè)人微信:Cc2015123  

          添加請(qǐng)注明來意 :)



          真愛三連,BiuBiuBiu~
          瀏覽 36
          點(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>
                  四虎影库在线视频 | 一二三区久在线视频 | 少妇被后入| 成人MV免费观看 | 亚洲 欧美 另类 综合 偷拍 |