最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql?InnoDB引擎中頁目錄和槽的查找過程

 更新時間:2022年05月31日 10:38:10   作者:把蘋果咬哭的測試筆記  
這篇文章主要為大家介紹了Mysql?InnoDB引擎中頁目錄和槽的查找記錄過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Mysql InnoDB引擎頁目錄

一、頁目錄和槽

接上一篇,現(xiàn)在知道記錄在頁中按照主鍵大小順序串成了單鏈表。

那么我使用主鍵查詢的時候,最順其自然的辦法肯定是從第一條記錄,也就是 Infrimum 記錄開始,一直向后找,只要存在總會找到。這種在數(shù)據(jù)量少的時候還好說,一旦數(shù)據(jù)多了,遍歷耗時一定非常長。

于是,作者又想到了一個好辦法,靈感來自于書本中的目錄。我們翻書的時候想查找一些內(nèi)容,就會去查看目錄,然后直接確定好內(nèi)容所在的頁碼。

那么對于 InnoDB 來說,過程如下:

  • 將所有正常的記錄劃分為幾個組,這里包括那 2 條虛擬記錄,但是不包含已經(jīng)被移除到垃圾鏈表的記錄。
  • 每個組內(nèi)最后一條記錄(也就是最大的那條)就是“大哥”,其他記錄都是“小弟”,而“大哥”記錄的頭信息中的 n_owned 屬性表示該組內(nèi)共有幾條記錄。
  • 將每個組中最后一條記錄在頁面中的地址偏移量單獨提取出來,按順序存儲到靠近頁尾部的地方。

這個地方就是頁目錄 Page Directory。而上述的地址偏移量就是該記錄的真實數(shù)據(jù)與頁面中第 0 個字節(jié)之間的距離,這些地址偏移量被稱為槽。

每個槽占用 2 字節(jié),頁目錄就是由多個槽組成。

二、頁目錄的規(guī)定

在上一篇中,創(chuàng)建的表里存在 4 條數(shù)據(jù),那么在頁中還要算上 Infimum 和 Supremum,共 6 條記錄。

這時候 InnoDB 會把它們分出 2 個組:

  • 第一組:只有一個 Infimum 記錄
  • 第二組:剩下的 5 條記錄

每個槽中,存放著每個組里最大的那條記錄所在頁面中的地址偏移量。

從圖中,需要關(guān)注頁目錄的一些點:

  • 頁目錄有 2 個槽,說明記錄被分為 2 個組。
  • Infimum 記錄的 n_owned 屬性值為 1,而 Supremum 的為 5。

為什么這 6 條記錄要這樣分?因為作者對于每組中的記錄數(shù)量有規(guī)定:

  • 對于 Infimum 所在的分組只能有 1 條記錄。
  • Supremum 所在的分組只能在 1~8 條之間。
  • 剩下的分組,記錄條數(shù)范圍只能是 4~8 之間。

三、頁目錄查找記錄的過程

現(xiàn)在繼續(xù)向測試表里插入 12 條數(shù)據(jù),也就是說在頁中共有 18 條記錄。

然后這些記錄就被分成了 5 個組,這里參考書籍上的示意圖(只保留一些關(guān)鍵屬性):

現(xiàn)在,要查找主鍵是 6 的記錄,要如何進(jìn)行?

因為 5 個槽的編號分別為 0、1、2、3、4 挨著的,并且里面的主鍵值也都是從小到大進(jìn)行排序的,可以使用二分法(不清楚的可以百度),那么初始情況下 low=0,high=4:

  • 計算中間槽的位置,(0+4)/ 2=2,于是查看槽 2 對應(yīng)記錄的主鍵值為 8,因為 8 > 6,所以 high = 2,low 不變。
  • 重新計算中間槽位置,(0+2)/ 2=1,于是查看槽 1 對應(yīng)記錄的主鍵為4,因為 4 < 6,所以 high 不變,low = 1。
  • 因為 high - low = 1,所以確定主鍵值為6 的記錄就在槽 2 對應(yīng)的組中。接著找到該組中主鍵最小的記錄,沿著單鏈表向后遍歷,最終找到主鍵 6 的記錄。

這里有個問題,槽對應(yīng)的值都是這個組的主鍵最大的記錄,如何找到組里最小的記錄?比如槽 2 對應(yīng)最大主鍵是 8 的記錄,那如何找到最小記錄。

解決辦法是:

  • 通過槽 2 找到 槽 1 對應(yīng)的記錄,也就是主鍵為 4 的記錄。
  • 主鍵為 4 的記錄的下一條記錄就是槽 2 當(dāng)中主鍵最小的記錄,可以找到主鍵 5。

總結(jié)

在一個數(shù)據(jù)頁中查找指定主鍵值的記錄,過程分為 2 步:

通過二分法確定該記錄所在分組對應(yīng)的槽,然后找到該槽所在分組中主鍵值最小的記錄。

通過記錄的 next_record 屬性比那里該槽所在組的各個記錄,最終找到目標(biāo)記錄。

本文參考書籍: 《mysql是怎樣運(yùn)行的》

以上就是Mysql InnoDB引擎中頁目錄和槽的查找過程的詳細(xì)內(nèi)容,更多關(guān)于Mysql InnoDB引擎頁目錄的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySql escape的使用案例詳解

    MySql escape的使用案例詳解

    本文通過實際案例給大家介紹MYSQL escape的使用,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-09-09
  • MySQL優(yōu)化案例之隱式字符編碼轉(zhuǎn)換

    MySQL優(yōu)化案例之隱式字符編碼轉(zhuǎn)換

    這篇文章主要介紹了MySQL優(yōu)化案例之隱式字符編碼轉(zhuǎn)換,隱式類型轉(zhuǎn)換也會導(dǎo)致同樣的放棄走樹搜索,更多相關(guān)內(nèi)容具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • idea 設(shè)置MySql主鍵的實現(xiàn)步驟

    idea 設(shè)置MySql主鍵的實現(xiàn)步驟

    在IDE開發(fā)工具中也是可以使用mysql的,本文主要介紹了idea 設(shè)置MySql主鍵的實現(xiàn)步驟,文中通過圖文的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • 常見php與mysql中文亂碼問題解決辦法

    常見php與mysql中文亂碼問題解決辦法

    MySQL對中文的支持程度還是很有限的,尤其是新手,但凡出現(xiàn)亂碼問題,就會頭大。
    2014-09-09
  • MySQL主從復(fù)制不一致的原因分析以及解決

    MySQL主從復(fù)制不一致的原因分析以及解決

    這篇文章主要介紹了MySQL主從復(fù)制不一致的原因分析以及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • MySQL數(shù)據(jù)庫優(yōu)化的六種方式總結(jié)

    MySQL數(shù)據(jù)庫優(yōu)化的六種方式總結(jié)

    關(guān)于數(shù)據(jù)庫優(yōu)化,網(wǎng)上有不少資料和方法,但是不少質(zhì)量參差不齊,所以下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫優(yōu)化的六種方式,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • MySQL索引的各種類型

    MySQL索引的各種類型

    這篇文章主要介紹了MySQL索引的各種類型,幫助大家更好的理解和學(xué)習(xí)MySQL索引,感興趣的朋友可以了解下
    2020-09-09
  • Navicat for MySQL 15注冊激活詳細(xì)教程

    Navicat for MySQL 15注冊激活詳細(xì)教程

    這篇文章主要介紹了Navicat for MySQL 15注冊激活詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • MySQL數(shù)據(jù)庫連接查詢?join原理

    MySQL數(shù)據(jù)庫連接查詢?join原理

    這篇文章主要介紹了MySQL數(shù)據(jù)庫連接查詢?join原理,文章首先通過將多張表連到一起查詢?導(dǎo)致記錄行數(shù)和字段列發(fā)生變化,利用一對一、一對多和多對多關(guān)系保證數(shù)據(jù)完整性展開主題內(nèi)容,需要的小伙伴可以參考一下
    2022-06-06
  • Mysql排序的特性詳情

    Mysql排序的特性詳情

    這篇文章主要介紹Mysql排序的特性,新寫了一個功能,自測和測試環(huán)境測試都沒問題,但在生產(chǎn)環(huán)境會出現(xiàn)偶發(fā)問題。于是,加班到12點一直排查問題,終于定位了的問題原因:Mysql Limit查詢優(yōu)化導(dǎo)致。現(xiàn)抽象出問題模型及解決方案,分析給大家,避免大家踩坑,需要的朋友可以參考一下
    2021-10-10

最新評論

临沂市| 望都县| 利辛县| 连江县| 长治县| 镇安县| 雅安市| 淮安市| 钟山县| 泾源县| 屏南县| 龙山县| 合阳县| 视频| 高尔夫| 句容市| 抚州市| 北碚区| 永胜县| 英吉沙县| 龙游县| 江西省| 洛浦县| 正定县| 深水埗区| 房山区| 霍州市| 壶关县| 资源县| 德钦县| 遵义县| 木兰县| 石家庄市| 肥乡县| 修文县| 翁牛特旗| 凌云县| 蓬安县| 泸溪县| 尼木县| 武邑县|