深入浅出——InnoDB记录结构详解,菜鸡看了直呼:能懂!

??????????????????????????????InnoDB???????????????????????????????????????????????????????????????InnoDB????????????????????????????????????????????????????????????
InnoDB??????????????????????????????????????????????????????????????????????????????????????????????????????16KB???????????????????????????????????????1??????????????????????????????1??????????????????????????????????????????????????????????????????????????????????????????

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

  • ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

  • ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????InnoDB?????????????????????????????????????????????????????????????????????

    image-20230613140903458

?????????

MySQL????????????(????????????)???????????????????????????????????????????????????????????????????????????????????????????????????

MySQL?????????4????????????

  • Compact
  • Redundant?????????????????????????????????????????????
  • Dynamic
  • Compressed

???????????????

CREATE TABLE ?????? (????????????) ROW_FORMAT=???????????????
ALTER TABLE ?????? ROW_FORMAT=???????????????
CREATE TABLE ?????? (????????????) ROW_FORMAT=???????????????
ALTER TABLE ?????? ROW_FORMAT=???????????????
CREATE TABLE ?????? (????????????) ROW_FORMAT=??????????????? ALTER TABLE ?????? ROW_FORMAT=???????????????

??????????????????????????????????????????

COMPACT?????????

image-20230613142254381

// (-_- ^!^) ???????????????????????????hhh

??????????????????????????????????????????????????????

?????????????????????

???????????????:mouse::mouse:?????????????????????????????????????????????????????????????????????

mysql> CREATE TABLE record_format_demo (
-> c1 VARCHAR(10),
-> c2 VARCHAR(10) NOT NULL,
-> c3 CHAR(10),
-> c4 VARCHAR(10)
-> ) CHARSET=ascii ROW_FORMAT=COMPACT;
Query OK, 0 rows affected (0.03 sec)
-------------------------------------------------------------
mysql> SELECT * FROM record_format_demo;
+------+-----+------+------+
| c1 | c2 | c3 | c4 |
+------+-----+------+------+
| aaaa | bbb | cc | d |
| eeee | fff | NULL | NULL |
+------+-----+------+------+
2 rows in set (0.00 sec)
mysql> CREATE TABLE record_format_demo (
    ->     c1 VARCHAR(10),
    ->     c2 VARCHAR(10) NOT NULL,
    ->     c3 CHAR(10),
    ->     c4 VARCHAR(10)
    -> ) CHARSET=ascii ROW_FORMAT=COMPACT;
Query OK, 0 rows affected (0.03 sec)
-------------------------------------------------------------
mysql> SELECT * FROM record_format_demo;
+------+-----+------+------+
| c1   | c2  | c3   | c4   |
+------+-----+------+------+
| aaaa | bbb | cc   | d    |
| eeee | fff | NULL | NULL |
+------+-----+------+------+
2 rows in set (0.00 sec)
mysql> CREATE TABLE record_format_demo ( -> c1 VARCHAR(10), -> c2 VARCHAR(10) NOT NULL, -> c3 CHAR(10), -> c4 VARCHAR(10) -> ) CHARSET=ascii ROW_FORMAT=COMPACT; Query OK, 0 rows affected (0.03 sec) ------------------------------------------------------------- mysql> SELECT * FROM record_format_demo; +------+-----+------+------+ | c1 | c2 | c3 | c4 | +------+-----+------+------+ | aaaa | bbb | cc | d | | eeee | fff | NULL | NULL | +------+-----+------+------+ 2 rows in set (0.00 sec)

????????????????????????

??????VARCHAR(M)???TEXT???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????

  • ?????????????????????
  • ??????????????????

???Compact????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????==??????????????????????????????==???

?????????????????????????????????????????? ???NULL ???????????????????????????????????? NULL ??????????????????????????????

image-20230613142045172

NULL?????????

????????????NULL????????????????????????????????????MySQL?????????NULL????????????????????????????????????????????????????????????????????????????????????????????????NULL???????????????

???????????????????????????NULL???????????????????????????????????????NULL????????????????????????????????????1?????????NULL???0????????????NULL???????????????????????????NULL??????????????????????????????

:tipping_hand_man:: MySQL??????NULL?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????0

emmm… ?????????????????????????????????????????????????????????????????????????????????????????? qwq???

?????????????????????????????????record_format_demo?????????c1???c3???c4??????????????????NULL????????????????????????????????????NULL???????????????????????????????????????

image-20230613142011240

??????:mouse::mouse:???:dog:????????????

06???????????????????????????

????????????????????????134

???????????????3 4

????????????????????????????????????

1 3 4

0 1 1

?????????????????? ????????? 110

???????????????6??????????????????06

???????????????????????????????????????

???????????????

??????????????????????????????5?????????(40???)??????, ????????????????????????????????????

image-20230613141931147

????????????????????????????????????

image-20230613141833415

????????????????????????????????????

????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????hhh

?????????????????????

??????????????????????????????????????????

  • image-20230613141606391

??????????????????????????????????????????????????????????????????row_id????????????????????????????????????????????????????????????record_format_demo??????????????????????????????MySQL??????????????????????????????????????????3?????????

image-20230613141538359

????????????????????????????????????????????????DB_ROW_ID???DB_TRX_ID???DB_ROLL_PTR???????????????????????????row_id???transaction_id???roll_pointer???

CHAR(M)??????????????????

?????? CHAR(M) ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

??????????????????CHAR(M)??????????????????????????????M???????????????VARCHAR(M)?????????????????????????????????????????????utf8?????????(???????????????3?????????)???CHAR(10)????????????????????????????????????????????????????????????10???30????????????????????????????????????????????????????????????????????????10????????????

CHAR??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

??????????????? ascll

??????????????? utf-8/gbk???

??????????????????==?????? CHAR(M) ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????==

???????????????

??????????????????????????????????????????

VARCHAR(M)????????????????????????

MySQL??????????????????????????????????????????????????????????????????BLOB??????TEXT???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????65535????????????(???????????????????????????mysql?????????????????????????????????????????????65535?????????)

????????????65535?????????????????????????????????storage overhead???

???varchar??????????????????3?????????

  • ????????????
  • ????????????????????????????????? 2??????
  • NULL???????????????????????????NOT NULL?????????????????????????????????????????? 1??????

??????varchar_size_demo????????????VARCHAR???????????????????????????VARCHAR??????????????????NOT NULL??????????????????????????????65532????????????????????????????????????ascii?????????????????????????????????????????????65532????????????utf8??????????????????????????????????????????21844???

????????????????????????????????????

???????????????????????????hhh

mysql> CREATE TABLE varchar_size_demo(
-> c VARCHAR(65532)
-> ) CHARSET=ascii ROW_FORMAT=Compact; #????????????ascii??????
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO varchar_size_demo(c) VALUES(REPEAT('a', 65532)); #??????????????????
Query OK, 1 row affected (0.00 sec)
mysql> CREATE TABLE varchar_size_demo(
    ->       c VARCHAR(65532)
    -> ) CHARSET=ascii ROW_FORMAT=Compact;      #????????????ascii??????
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO varchar_size_demo(c) VALUES(REPEAT('a', 65532));  #??????????????????
Query OK, 1 row affected (0.00 sec)
mysql> CREATE TABLE varchar_size_demo( -> c VARCHAR(65532) -> ) CHARSET=ascii ROW_FORMAT=Compact; #????????????ascii?????? Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO varchar_size_demo(c) VALUES(REPEAT('a', 65532)); #?????????????????? Query OK, 1 row affected (0.00 sec)

REPEAT?????????????????????????????????????????????n???

??????????????????mysql?????????????????????????????????????????????????????????16KB???16384?????????????????????????????????????????????65535??????????????????????????????????????????????????????????????????

  • ????????????:dog: # ( q _ q ^???^) ?????? ??????????????????

???Compact???Redundant?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????20????????????????????????????????????????????????????????????????????????????????????

img?????????????????????????????????????????????

????????????????????????????????????????????????????????????768?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????768?????????????????????????????????????????????

img?????????????????????????????????????????????

???????????????????????????????????????????????????????????????????????????os????????????????????????????????????????????????????????????

????????????-???20000?????????????????? ??? Karos (wzl1.top)

?????????????????????

MySQL????????????????????????????????????????????????????????????varchar_size_demo??????????????????????????????c?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

  1. ??????????????????????????????????????????????????????????????????????????????????????????132????????????

  2. ????????????????????????????????????27??????

    ???27????????????????????????????????????

    • 2?????????????????????????????????????????? ?????????????????????????????????65535????????????
    • 1?????????????????????????????????NULL???
    • 5???????????????????????????
    • 6????????????row_id???
    • 6????????????transaction_id???
    • 7????????????roll_pointer???

?????????????????????????????????????????????n????????????????????????????????????????????????????????????

132 + 2??(27 + n) < 16384 #???????????? 16kb 16384??????
132 + 2??(27 + n) < 16384  #???????????? 16kb 16384??????
132 + 2??(27 + n) < 16384 #???????????? 16kb 16384??????

?????????n < 8099??????????????????????????????????????????????????????8099??????????????????????????????????????????????????????????????????????????????????????????????????????

compact?????????????????????????????????????????????:

Redundant?????????

????????????????????????????????????????????????????????????????????????????????????

image-20230613141459088

?????????????????????

mysql> ALTER TABLE record_format_demo ROW_FORMAT=Redundant;
-------------------------------------------------------------------
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE record_format_demo ROW_FORMAT=Redundant;
-------------------------------------------------------------------
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE record_format_demo ROW_FORMAT=Redundant; ------------------------------------------------------------------- Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0

image-20230613144522298

?????????????????????

?????????????????????

????????????,compact??????????????????????????????,?????????????????????????????????????????????

???????????????????????????????????????:

??????????????????????????????????????????????????????????????????????????????

image-20230613145634802

???????????????

Redundant ????????????????????????????????? 6 ????????? 48 ????????????????????????????????????????????????????????????

?????? ??????????????????bit??? ??????
?????????1 1 ????????????
?????????2 1 ????????????
delete_mask 1 ??????????????????????????????
min_rec_mask 1 B+??????????????????????????????????????????????????????????????????
n_owned 4 ????????????????????????????????????
heap_no 13 ?????????????????????????????????????????????
n_field 10 ???????????????????????????
1byte_offs_flag 1 ?????????????????????????????????????????????????????????????????????1????????????2???????????????
next_record 16 ????????????????????????????????????

?????????????????????

?????????????????????

Dynamic???Compressed?????????

Dynamic????????? ???MySQL 5.7????????????????????????

??????????????????compact?????????????????????????????????????????????????????????????????????????????????????????????????????????768?????????????????????768??????????????????????????????

image-20230613150923452

??????Compressed????????????????????????????????????????????????????????????

????????????????????????MySQL ??????????????????????????????????????? MySQL – ?????????4919 – ???????????? (juejin.cn)

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYK3svGG' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片