国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > 文庫 > 正文

INNODB 頁節(jié)點數(shù)據(jù)的存儲方法

2024-09-07 22:12:50
字體:
來源:轉載
供稿:網(wǎng)友
  前文:
  關于MYSQL INNODB index page header學習和實驗總結
  http://blog.itpub.net/7728585/viewspace-2063921/
  關于INNODB SYSTEM RECORD infimum和supremum的學習和實驗研究
  http://blog.itpub.net/7728585/viewspace-2065464/
 
  所用到的工具是自己寫的mysqlblock和bcview,
  我放到了百度云盤
  http://pan.baidu.com/s/1num76RJ
  供大家下載和使用
  本文只討論COMPACT行模式
 
  數(shù)據(jù):
  mysql> select * from km1;
  +------+---------+
  | id   | name    |
  +------+---------+
  |    2 | gaopeng |
  |    4 | gaopeng |
  |    5 | gaopeng |
  |    6 | gaopeng |
  |    7 | gaopeng |
  |    8 | gaopeng |
  +------+---------+
  6 rows in set (0.04 sec)
 
  上一篇文章已經(jīng)從infimum找到了第一行數(shù)據(jù)的偏移量
  為99+65=164
  同時取出了第一行數(shù)據(jù):
  bcview km1.ibd 16 164 30|more
  current block:00000003--Offset:00164--cnt bytes:30--data is:000001cc64260000002d0272d300000d1201108000000267616f70656e67
  分解一下數(shù)據(jù)
  000001cc6426   ROWID
  0000002d0272   transaction id
  d300000d120110 roll pointer
  80000002       數(shù)據(jù)2,這里8出現(xiàn)在第15位,可能為符號位
  67616f70656e67 數(shù)據(jù)'gaopeng'的ascII值
 
  那么我們解析來介紹關于CLUSTER KEY-LEAF BLOCK的相關的部分
  很顯然我這里的表只有一個塊,因為數(shù)據(jù)很少。所以先介紹這個
  ,因為所謂的infimum的offset是指向的數(shù)據(jù)的開頭,而行頭信息
  記錄在offset-N的位置,N不確定看了如下就知道了
 
 
             variable field lengths  (1-2 bytes* var )
             nullable field bitmap   (1 bit * null field)
             info flags              (4 bits)
             number of records owned (4 bits)
             order                   (13 bits)
             record type             (3 bits)
             next record offset      (2 bytes)
  offset ----cluster key fields      (N bytes)
             transaction id          (6 bytes)
             roll pointer            (7 bytes)
             non-key fields          (M bytes)
 
  1、variable field lengths
     每個可變長度的變量類型存儲一個長度如varchar,對于固定長度的比如INT不記錄。
     如果不存在可變長度的變量類型,至少占用一個字節(jié)為00。
  2、nullable field bitmap
     每個NULL值占用一個一位(bit),如果不滿一個字節(jié)按一個字節(jié)算,如果不存在NULL值
     至少占用一個字節(jié)為00。
  3、info flags
     這4位(4bits)標示是一個行標識,其中binary 0001表示非葉節(jié)點最小的行
     其中binary 0010表示是刪除的行,而infimum和supremum行在我測試數(shù)據(jù)庫中為binary 0000
  4、number of records owned
     這4位(4bits)表示在本page directory(槽)中的記錄數(shù),關于槽的概念后面詳細探討
  5、order
     這13位(13bits)表示記錄插入到塊中順序,INFIMUM恒等于0而SPREMUM恒等于1,而數(shù)據(jù)行的ORDER從2開始,這里的order
     我實驗得出的結論為實際物理空間的順序
  6、record type
     這3位(3bits)表示記錄的類型,supermum恒等于3及binary 011,infimum恒等于2及binary010,節(jié)點指針為1及001,數(shù)據(jù)行為000
  7、next record offset
     這2個字節(jié)是按照CLUSTER KEY值排序的,也就是說他的順序和order沒有任何聯(lián)系,order是插入的順序
     在INFIMUM中表示的是第一個行的偏移量這個偏移量是當前記錄的位置+offset,這個offset直接指向了數(shù)據(jù)而相關的行頭在offset-n開始n為行頭的開銷。
     當然supermum為的偏移量就是NULL空指針了。
  8、cluster key fields
     這N個字節(jié)代表主鍵字節(jié)數(shù),沒有就是ROWID占用6字節(jié)
  9、transaction id
     這6個字節(jié)為最后一次修改本行的事物ID
  10、roll pointer
      這7個字節(jié)是用于支持MVCC多版本的回退指針,
      1bit 標識
      7bit 回退段ID
      4bytes 回滾段頁號
      2bytes 回滾段頁的偏移量
     這幾位在討論MVCC的時候詳細研究
  11、non-key fields
      也就是M個字節(jié)的非主鍵字段的數(shù)據(jù)了。
 
  同樣分解數(shù)據(jù)
  07
  00
  0
  0
  0020       這里分解同上 0000 0000 0010 0=十進制4 這是order 表示這個數(shù)據(jù)在上條數(shù)據(jù)插入之前,但是OFFSET是按照ROWID排序的。
  ffb6       任然是補碼的方式 實際就是-74
  000001cc6500
  0000002d062bab
  00000d0c0110
  80000005   實際數(shù)據(jù)5
  67616f70656e67 實際數(shù)據(jù)'gaopeng'

(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌苏市| 信宜市| 肇州县| 靖边县| 铜川市| 马山县| 义马市| 灵丘县| 资阳市| 云梦县| 太康县| 白银市| 德化县| 菏泽市| 苗栗市| 阿拉善左旗| 团风县| 福泉市| 武定县| 汉寿县| 岱山县| 龙陵县| 丹阳市| 易门县| 天津市| 柏乡县| 东台市| 临潭县| 阿拉善左旗| 德昌县| 定边县| 丹寨县| 定日县| 庆城县| 富顺县| 桂阳县| 巴马| 黑龙江省| 沧州市| 榆社县| 灵山县|