日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

从根儿上理解mysql_从根儿上理解 MySQL - 页总结

發布時間:2023/12/19 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从根儿上理解mysql_从根儿上理解 MySQL - 页总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

頁結構簡介

由于 MySQL 的真實數據是存儲在磁盤, 因此在讀寫數據是會涉及磁盤 IO, 為了更高效率的讀取, MySQL 設計頁結構, 每次交互以頁為單位讀取到內存. 頁的大小一般為 16KB

行格式

行格式主要分為四種類型Compact、Redundant、Dynamic和Compressed. 主要理解 Compact

Compact 行格式

行格式主要分為記錄的額外信息, 記錄的真實數據

變長字段長度列表

變長字段長度列表存儲的是變長類型的真實數據的占用字節數(逆序).

如果該表沒有變長類型, 則無變長字段長度列表

變長字段長度列表只保存 NOT NULL列, 如果該列允許為 NULL, 則不會保存

舉例: 字段 0 int 0, 字段1 vachar(10) NOT NULL 'A', 字段2 vachar(10) default NULL 'B', 字段3 vachar(10) NOT NULL 'AA'

變長字段長度列表: 02 01

可通過 變長字段反推字段的長度

復制代碼

NULL 值列表

NULL 值列表只統計哪些字段允許為 NULL的值狀態(逆序)

如果該表沒有允許 NULL 列, 則無 NULL 值列表

MySQL規定NULL值列表必須用整數個字節的位表示,如果使用的二進制位個數不是整數個字節,則在字節的高位補0

二進制位的值為1時,代表該列的值為NULL 二進制位的值為0時,代表該列的值不為NULL

舉例: 字段 0 vachar(10) NOT NULL 'A', 字段1 vachar(10) default NULL 'B', 字段2 vachar(10) default NULL NULL, 字段3 vachar(10) default NULL NULL

逆序后: 字段3 - 1, 字段2 - 1, 字段1 - 0

NULL 值列表: 00000110

可通過 NOT NULL 字段反推哪些字段值為 NULL, 哪些字段值不為 NULL

復制代碼

記錄頭

這一部分牽扯的內容較多

大致可以看一下刪除標識(刪除是并非真正刪除, 只是修改表示), 下一條記錄位置(B+樹特性)

除了這些詳細信息, 還會有 MySQL 自動添加的隱藏列

實際上這幾個列的真正名稱其實是:DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR, 為了美觀才寫成了row_id、transaction_id和roll_pointer

row_id: 有主鍵使用主鍵, 沒有主鍵有唯一鍵使用唯一鍵, 沒有則自動生成

transaction_id: 事務 ID

roll_pointer: 回滾指針

行溢出

因為一個頁占用 16KB, 16 * 1024 = 16384 字節, 而 varchar 最多可以占用65535, 不包括隱藏列和記錄頭信息

但是在我們使用 varchar 時, 會設置變長字段長度列表和 NULL 值列表

對于 NOT NULL, 只能使用65533字節 (兩個字節用來表示長度) 對于非 NOT NULL, 只用使用 65532 字節 (兩個字節用來表示長度, 一個字節用來表示 NULL 標識)

對于行溢出的情況, 真實的數據只用存儲前 768 字節, 后面放的是溢出頁地址

復制代碼

行溢出的節點

綜上所述, 我們知道在數據的占用字節數超過某個閾值就會發生行溢出, 那么行溢出的計算方式分析如下

ps: 截圖來源于MySQL 是怎樣運行的:從根兒上理解 MySQL(小孩子 4919)

其他

delete_mask

這個屬性標識該條記錄是否已刪除

如果 MySQL 設計刪除一條則執行磁盤刪除, 會導致磁盤IO增加, MySQL 為了優化, 使用一個標識表示該記錄已被刪除, 如果有新的記錄來, 會覆蓋該條記錄

如果想要優化空間, 則執行 optimize table 'name' 即可

參考文獻

總結

以上是生活随笔為你收集整理的从根儿上理解mysql_从根儿上理解 MySQL - 页总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。