??????????????????????????????InnoDB???????????????????????????????????????????????????????????????InnoDB????????????????????????????????????????????????????????????
InnoDB??????????????????????????????????????????????????????????????????????????????????????????????????????16KB???????????????????????????????????????1??????????????????????????????1??????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
-
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
-
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????InnoDB?????????????????????????????????????????????????????????????????????
?????????
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?????????
// (-_- ^!^) ???????????????????????????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 ??????????????????????????????
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???????????????????????????????????????
??????:mouse::mouse:???:dog:????????????
06???????????????????????????
????????????????????????134
???????????????3 4
????????????????????????????????????
1 3 4
0 1 1
?????????????????? ????????? 110
???????????????6??????????????????06
???????????????????????????????????????
???????????????
??????????????????????????????5?????????(40???)??????, ????????????????????????????????????
????????????????????????????????????
????????????????????????????????????
????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????hhh
?????????????????????
??????????????????????????????????????????
??????????????????????????????????????????????????????????????????row_id????????????????????????????????????????????????????????????record_format_demo??????????????????????????????MySQL??????????????????????????????????????????3?????????
????????????????????????????????????????????????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????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????768?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????768?????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????os????????????????????????????????????????????????????????????
????????????-???20000?????????????????? ??? Karos (wzl1.top)
?????????????????????
MySQL????????????????????????????????????????????????????????????varchar_size_demo??????????????????????????????c?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
-
??????????????????????????????????????????????????????????????????????????????????????????132????????????
-
????????????????????????????????????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?????????
????????????????????????????????????????????????????????????????????????????????????
?????????????????????
mysql> ALTER TABLE record_format_demo ROW_FORMAT=Redundant;-------------------------------------------------------------------Query OK, 0 rows affected (0.05 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> ALTER TABLE record_format_demo ROW_FORMAT=Redundant; ------------------------------------------------------------------- Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0mysql> ALTER TABLE record_format_demo ROW_FORMAT=Redundant; ------------------------------------------------------------------- Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0
?????????????????????
?????????????????????
????????????,compact??????????????????????????????,?????????????????????????????????????????????
???????????????????????????????????????:
??????????????????????????????????????????????????????????????????????????????
???????????????
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??????????????????????????????
??????Compressed????????????????????????????????????????????????????????????
????????????????????????MySQL ??????????????????????????????????????? MySQL – ?????????4919 – ???????????? (juejin.cn)