MySQL ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????? MySQL ??????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????
????????????????????????????????????????????????????????? MySQL ????????????????????????????????????????????????????????????????????? ????????? ??? ???????????????????????????????????????????????????????????? InnoDB ??? MyISAM ??? Memory ?????????????????????????????????????????? ??????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????? ?????? Memory ??????????????????????????????????????????????????????????????????????????????????????????????????? InnoDB ??? MySQL ?????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????? InnoDB ????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????~
InnoDB ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????? InnoDB ?????????????????????????????????????????????????????????????????????????????????????????????
InnoDB ????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????? InnoDB??????????????? ????????? 16 KB???????????????????????????????????????????????????????????????16KB???????????????????????????????????????????????????16KB ???????????????????????????
1.3 InnoDB?????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????? ?????? ???????????? ??? ?????? InnoDB ????????????????????????????????????????????????4?????????????????? ????????? ???????????? Compact ??? Redundant ???
Dynamic ??? Compressed ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????
1.3.1 ????????????????????????
??????????????????????????????????????????????????? ????????? ???
CREATE TABLE ?????? (????????????) ROW_FORMAT=???????????????
ALTER TABLE ?????? ROW_FORMAT=???????????????
??????????????? xiaohaizi ??????????????????????????????????????? record_format_demo ??????????????????????????? ????????? ???
mysql> USE xiaohaizi;
Database changed
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)
????????????????????????????????????????????? ????????? ?????? Compact ???????????????????????????????????????????????????????????? ascii ??? ?????? ascii ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????????????
mysql> INSERT INTO record_format_demo(c1, c2, c3, c4) VALUES('aaaa', 'bbb', 'cc', 'd'),
('eeee', 'fff', NULL, NULL);
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
?????????????????????????????????????????????
mysql> SELECT * FROM record_format_demo;
+------+-----+------+------+
| c1 | c2 | c3 | c4 |
+------+-----+------+------+
| aaaa | bbb | cc | d |
| eeee | fff | NULL | NULL |
+------+-----+------+------+
mysql>2 rows in set (0.00 sec)
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????~
4.3.2 COMPACT?????????
?????????????????????????????????
??????????????????????????????????????????????????????????????????????????? ????????????????????? ??? ????????????????????? ???????????????????????? ??????????????????????????????????????????
4.3.2.1 ?????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????3??????????????? ???????????? ???????????? ??? NULL????????? ??? ??????????????? ???????????????????????????
????????????????????????
???????????? MySQL ?????????????????????????????????????????? VARCHAR(M) ??? VARBINARY(M) ????????? TEXT ??????????????? BLOB ??? ???????????????????????????????????????????????????????????? ???????????? ???????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? MySQL ???????????????????????? ?????????????????????????????????????????????????????????
1. ?????????????????????
2. ??????????????????
??? Compact ??????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????? record_format_demo ???????????????????????????????????????????????? record_format_demo ?????? c1 ??? c2 ??? c4 ??? ?????? VARCHAR(10) ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
record_format_demo ????????????????????????????????? ascii ???????????????????????????????????????1????????????????????????????????? ??????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????? ???????????????????????? ???????????????????????????????????????????????? (???????????????????????????????????????????????????????????????????????????)???
01 03 04
??????????????????????????? ???????????????????????? ?????????????????????????????????????????????
???????????????????????? c1 ??? c2 ??? c4 ????????????????????????????????????????????????????????????????????????????????????1??????????????? ??????????????????????????????????????????????????????????????????????????????????????????2??????????????????????????????1?????????2???????????? ??????????????????????????????????????? InnoDB ???????????????????????????????????????????????? W ??? M ??? L ????????????
1. ??????????????????????????????????????????????????????????????????????????? W ?????????????????? SHOW CHARSET ????????????????????? Maxlen ??????????????? utf8 ??????????????? W ?????? 3 ??? gbk ??????????????? W ?????? 2 ??? ascii ??????????????? W ?????? 1 ???
2. ?????????????????? VARCHAR(M) ?????????????????????????????????????????? M ?????????(???????????????????????????)?????????????????? ?????????????????????????????????????????????????????? M??W ???
3. ?????????????????????????????????????????????????????? L ???
??????????????????1???????????????2????????????????????????????????????????????????????????????????????????
?????? M??W <= 255 ???????????????1??????????????????????????????????????????????????????
????????????InnoDB????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????255???????????????????????????1??????????????????????????????????????????????????????
?????? M??W > 255 ???????????????????????????
?????? L <= 127 ?????????1??????????????????????????????????????????????????????
?????? L > 127 ?????????2??????????????????????????????????????????????????????
InnoDB?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????255???????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????InnoDB???????????????????????????????????????????????????????????????????????????????????????????????????0?????? ??????????????????????????????????????????(?????????????????????????????????127?????????????????????????????????0)??? ?????????????????????????????????1??????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????16KB????????????????????????????????? ???????????????????????????InnoDB???????????????????????????????????????????????????(?????????????????????)????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????( M??W )??????255????????????????????????????????????( L ) ??????127??????????????????2????????????????????????1????????????
????????????????????????????????? ?????????????????????????????????????????? ???NULL ???????????????????????????????????? NULL ??????????????? ??????????????? ??????????????????????????????????????????????????? c4 ???????????? NULL ??????????????????????????? ???????????????????????? ??? ???????????? c1 ??? c2 ??????????????????????????? c1 ?????????????????? 'eeee' ???????????????????????? 4 ??? c2 ???????????????
??? 'fff' ???????????????????????? 3 ????????? 4 ?????????1?????????????????? 3 ????????????1?????????????????????????????? ?????????????????? ?????? ??????2????????????????????? ???????????????????????? ????????????????????????????????????
????????????
????????????????????????????????? ???????????????????????? ??????????????????????????????????????????????????????????????????????????? ??????????????????????????????
NULL?????????
?????????????????????????????????????????? NULL ????????????????????? NULL ???????????? ????????????????????? ?????????????????????????????? ??? Compact ???????????????????????? NULL ???????????????????????????????????? NULL ????????????????????????????????????????????????
1. ?????????????????????????????? NULL ??????????????????
???????????????????????????????????? NOT NULL ????????????????????????????????? NULL ???????????????????????????????????????????????????
???????????????????????? record_format_demo ???3?????? c1 ??? c3 ??? c4 ?????????????????? NULL ???????????? c2 ????????? NOT NULL ???????????????????????? NULL ??????
2. ?????????????????????????????? NULL ???????????? NULL?????????????????????????????????????????????????????? NULL ?????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????? 1 ??????????????????????????? NULL ???
????????????????????? 0 ?????????????????????????????? NULL ???
????????? record_format_demo ???3??????????????? NULL ??????????????????3????????????????????????????????????????????? ??????
????????????????????????????????????????????????????????????????????????????????? c1 ????????????????????????????????????
3. MySQL ?????? NULL????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 0 ???
??? record_format_demo ??????3??????????????? NULL ???????????????3???????????????????????????????????????????????????????????? ?????? 0 ????????????????????????
????????????????????????????????????9???????????? NULL ????????????????????? NULL ????????????????????????2????????????????????????
???????????????????????????????????????????????? record_format_demo ???????????????????????? NULL????????? ?????????????????????????????? ??? c1 ??? c3 ??? c4 ???3?????????????????? NULL ??????????????????????????? NULL????????? ????????????????????????
?????????????????????????????? c1 ??? c3 ??? c4 ???3????????????????????? NULL ?????????????????????????????????????????? 0 ???????????????????????????
???????????????????????? NULL????????? ?????????????????????????????? 0x00 ???
?????????????????????????????? c1 ??? c3 ??? c4 ???3????????? c3 ??? c4 ???????????? NULL ????????????3?????????????????????????????????????????????
???????????????????????? NULL????????? ?????????????????????????????? 0x06 ???
????????????????????????????????? NULL????????? ??????????????????????????????
???????????????
?????? ???????????????????????? ??? NULL????????? ?????????????????????????????????????????? ??????????????? ????????????????????? 5 ???????????? ?????? 5 ?????????????????? 40 ???????????????????????????????????????????????????????????????
??????????????????????????????
B+??????????????????????????????????????????????????????????????????
????????????????????????????????????
?????????????????????????????????????????????
?????????????????????????????? 0 ????????????????????? 1 ??????B+??????????????????????????? 2 ????????????????????? 3??????????????????
????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????? record_format_demo ????????????????????? ????????? ??????????????????
????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~
1.3.2.2 ?????????????????????
????????????
????????????????????????????????????????????????DB_ROW_ID???DB_TRX_ID???DB_ROLL_PTR?????????????????????????????????row _id???transaction_id???roll_pointer???
????????????????????? InnoDB ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????? Unique ????????????????????????????????? Unique ?????????????????????????????? InnoDB ?????????????????????????????????
row_id ?????????????????????????????????????????????????????????????????? InnoDB??????????????????????????????????????? transaction_id ??? roll_pointer ????????????????????? row_id ????????????(??????????????????????????????Unique?????????????????????????????????) ??? ?????????????????????????????????????????? InnoDB ??????????????????????????????????????????
????????? record_format_demo ?????????????????????????????? MySQL ??????????????????????????????????????????3???????????????????????? ?????? ????????????????????? ?????????????????????????????????
????????????????????????????????????????????????
1. ??? record_format_demo ???????????? ascii ?????????????????? 0x61616161 ?????????????????? 'aaaa' ??? 0x626262 ?????? ???????????? 'bbb' ??????????????????
2. ?????????1???????????? c3 ?????????????????? CHAR(10) ????????????????????????????????????????????? 'cc' ?????? ascii ???????????? ?????????????????? '0x6363' ??????????????????????????????????????????2????????????????????? c3 ??????????????????10??????????????? ??????????????????????????????8???????????????????????????????????????????????????????????? ascii ???????????????????????? 0x20 ???
3. ?????????2???????????? c3 ??? c4 ??????????????? NULL ????????????????????????????????? NULL????????? ????????????????????????????????? ???????????????????????????????????????????????????
4.3.2.3 CHAR(M)??????????????????
record_format_demo ?????? c1 ??? c2 ??? c4 ??????????????? VARCHAR(10) ?????? c3 ??????????????? CHAR(10) ??????????????? Compact ???????????????????????????????????????????????????????????? ???????????????????????? ?????????????????????
?????????????????????????????? record_format_demo ??????????????? ascii ???????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????(??????????????????????????????????????????????????????????????? gbk ?????????????????????12???????????? utf8 ?????????????????????13????????????)????????? c3 ?????????????????????????????? ????????????
???????????? ?????????????????????????????? record_format_demo ??????????????????
mysql> ALTER TABLE record_format_demo MODIFY COLUMN c3 CHAR(10) CHARACTER SET utf8; Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
????????????????????????????????? ???????????????????????? ??????????????????????????????
?????????????????? ?????? CHAR(M) ???????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????? CHAR(M) ?????????????????????????????? M ??????????????? VARCHAR(M) ?????????????????? ??????????????????????????? utf8 ???????????? CHAR(10) ????????????????????????????????????????????????????????????10 ~ 30??????????????? ????????????????????????????????????????????????????????? 10 ???????????????????????????????????????????????????????????????????????????????????? ???????????????10????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????(???????????????????????? Compact ????????????????????????????????????????????????????????????
CHAR(M) ???????????????????????????????????????????????????)
4.3.3 Redundant?????????
??????????????? Compact ??????????????????????????????????????????????????????????????????????????????????????? Redundant ????????????
MySQL5.0 ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????
????????????????????? Redundant ?????????????????????
?????????????????? record_format_demo ????????????????????? Redundant ???
mysql> ALTER TABLE record_format_demo ROW_FORMAT=Redundant;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
???????????????????????????????????????????????????????????? record_format_demo ??? Redundant ??????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????? Redundant ????????????????????????????????????
????????????????????????
?????? Compact ????????????????????? ???????????????????????? ?????? Redundant ????????????????????? ???????????????????????? ?????? ???????????????????????? ??????????????????
???????????????????????????????????? Redundant ??????????????????????????????????????? (?????? ????????? )?????????????????????
?????????????????? ???????????????????????? ???
???????????????????????????????????????????????????????????????????????? Compact ???????????????????????????????????????????????????
?????????????????????????????????????????????
???????????????????????? ???????????????????????? ?????????
25 24 1A 17 13 0C 06
?????????????????????????????????????????????????????????????????????
06 0C 13 17 1A 24 25
?????????????????????????????????????????????????????????????????????????????????
?????????(`row_id`)??????????????? 0x06?????????????????????6????????????
?????????(`transaction_id`)??????????????? (0x0C - 0x06)?????????????????????6???????????? ?????????(`roll_pointer`)??????????????? (0x13 - 0x0C)?????????????????????7???????????? ?????????(`c1`)??????????????? (0x17 - 0x13)?????????????????????4????????????
?????????(`c2`)??????????????? (0x1A - 0x17)?????????????????????3????????????
?????????(`c3`)??????????????? (0x24 - 0x1A)?????????????????????10????????????
?????????(`c4`)??????????????? (0x25 - 0x24)?????????????????????1????????????
???????????????
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 |????????????????????????????????????|
????????????????????????????????????
00 00 10 0F 00 BC
??????????????????????????????????????????????????????????????????
?????????1???0x00
?????????2???0x00
delete_mask: 0x00
min_rec_mask: 0x00
n_owned: 0x00
heap_no: 0x02
n_field: 0x07
1byte_offs_flag: 0x01
next_record:0xBC
??? Compact ????????????????????????????????????????????????????????????
Redundant ??????????????? n_field ??? 1byte_offs_flag ??????????????????
Redundant ??????????????? record_type ???????????????
1byte_offs_flag ????????????????????????
???????????????????????? ?????????????????????????????????????????????????????? ????????????????????? ??????????????????????????????
record_format_demo ???????????????????????? 0x06 ????????????????????? ????????????????????? ???6????????????????????? 0x0C ??? ?????????????????? ????????????????????? ???12????????????????????? 0x13 ????????????????????? ????????????????????? ???19??????????????? ???????????????????????????????????????????????????????????? 0x25 ???????????????????????????????????? ????????????????????? ???37?????? ????????????????????????????????????????????? ???????????? ??????????????? 37 ????????????
?????????????????????????????????????????????????????????1???????????????2?????????????????????????????????????????????1?????????????????? ?????????2???????????????????????????????????? Redundant ????????? ????????????????????? ?????????????????????????????????
???????????????????????????????????????????????????127 (???????????? 0x7F ???????????? 01111111 )???????????????????????????
????????????1????????????
????????????
??????????????????????????????????????????????????????????????????127??????????????????????????????????????????????????? ??????????????????127?????????????????????1????????????????????????
????????????????????????????????????????????????127???????????????32767 (???????????? 0x7FFF ????????????
0111111111111111 )???????????????????????????????????????2????????????
????????????????????????????????????32767??????????????????????????????????????????????????????????????????????????????????????????
????????? 768 ????????????20??????????????????????????????(?????????20??????????????????????????????????????????)????????? ??? ????????????????????? ????????????????????????????????????????????????????????????????????????????????????2??????????????????????????? ????????????
?????????????????????????????? Redundant ?????????????????????????????????????????????????????????????????? ????????????????????? ?????????????????????1???????????????2???????????????????????????????????????????????????????????????????????????????????????????????? ?????????127???????????????????????????????????????????????????127?????????????????????????????????2?????????????????????????????? ??????????????????????????????????????????????????????(????????????????????????????????????~)???
????????????
?????????????????????????????????????????????????????????0~255????????????????????????????????????????????????????????? ???127????????????2??????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????1???????????????2??????????????????????????? Redundant ??????????????? ???????????? ??????????????? ??????????????????????????? 1byte_offs_flag ????????????
???????????????1??????????????????1??????????????????
???????????????0??????????????????2??????????????????
Redundant ???????????? NULL ????????????
?????? Redundant ?????????????????? NULL????????? ??????????????? Redundant ????????????????????? ???????????????????????? ?????? ?????????????????????????????????????????????????????? ?????? ??????????????????????????????????????????????????????????????? NULL ?????? ??????????????????????????????????????? NULL????????? ???????????????????????????????????????????????????????????????????????????????????? ???????????? NULL????????? ???????????? 1 ???????????? 1 ??????????????????????????? NULL ??????????????? NULL ???
????????????????????????????????????????????????????????????????????????127 (???????????? 0x7F ???????????? 01111111 )???????????? ???2??????????????????????????????????????????????????????????????????????????????????????? NULL????????? ????????????????????????????????? ??? NULL ???
?????????????????????????????????????????? NULL ???????????????????????????????????????????????????????????? NULL ????????????????????? ????????????????????????????????? record_format_demo ???????????????????????????????????? ???????????????????????? ?????????
A4 A4 1A 17 13 0C 06
?????????????????????????????????
06 0C 13 17 1A A4 A4
???????????????????????????
???????????? NULL ?????????????????????????????????????????? CHAR(M) ????????????????????? NULL ??????????????????????????????
??????????????????????????????????????????????????? 0x00 ???????????????
???????????????????????? c3 ???????????? NULL ?????? c3 ??????????????? CHAR(10) ????????????????????????????????????10??? ??????????????????????????? Redundant ?????????????????? 0x00000000000000000000 ????????? NULL ??????
????????? c3 ???????????????????????? 0xA4 ???????????????????????????????????? 10100100 ??????????????????????????? 1 ????????? ?????????????????? NULL ??????????????????????????????????????? 0100100 ??????????????????????????? 36 ?????? c2 ??????????????? ????????? 0x1A ???????????????????????? 26 ??? 36 - 26 = 10 ????????????????????? c3 ???????????????????????????10????????????
??????????????? NULL ???????????????????????????????????????????????? ????????????????????? ??????????????????????????????
?????? record_format_demo ?????? c4 ?????? VARCHAR(10) ???????????? VARCHAR(10) ??????????????????????????????
c4 ???????????????????????? 0xA4 ?????? c3 ??????????????????????????????????????????????????????????????? NULL ?????? 0xA4 ???????????????????????????????????????????????? 36 ??? 36 - 36 = 0 ?????????????????? c4 ???????????????????????? ???????????? ????????? ???????????????
?????????????????????????????? Redundant ???????????? Compact ?????????????????????????????????
1.3.3.1 CHAR(M)??????????????????
???????????? Compact ???????????? CHAR(M) ??????????????????????????????????????????????????????????????????????????????????????????????????? ?????? Redundant ????????????????????????????????????????????????????????????????????????????????? CHAR(M) ????????????????????????????????? ?????????????????????????????????????????????????????????????????? M ??????????????????????????? utf8 ???????????? CHAR(10) ??????????????? ????????????????????????????????? 30 ?????????????????? gbk ???????????? CHAR(10) ???????????????????????????????????????????????? 20 ?????? ???????????????????????????????????? Redundant ???????????? CHAR(M) ???????????????????????????????????????
1.3.4 ???????????????
1.3.4.1 VARCHAR(M)????????????????????????
?????????????????? VARCHAR(M) ?????????????????????????????? 65535 ????????????????????? M ???????????????????????????????????????????????? ??????????????? ascii ?????????????????????????????????????????????????????????????????? VARCHAR(65535) ???????????????
mysql> CREATE TABLE varchar_size_demo(
-> c VARCHAR(65535)
-> ) CHARSET=ascii ROW_FORMAT=Compact;
mysql>ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to c
hange some columns to TEXT or BLOBs
????????????????????????????????? MySQL ?????????????????????????????????????????????????????????????????? BLOB ?????? TEXT ??????????????? ????????????????????????(????????????????????????????????????)?????????????????????????????????????????? 65535 ?????????????????? MySQL ??? ??????????????????????????????????????? TEXT ?????? BLOB ?????????????????? 65535 ????????????????????????????????????????????????????????? ???????????????( storage overhead )???????????????????????????????????? VARCHAR(M) ?????????????????????????????????3???????????? ?????????
????????????
?????????????????????????????????
NULL ??????????????????????????? NOT NULL ??????????????????????????????????????????
????????? VARCHAR ?????????????????? NOT NULL ?????????????????????????????? 65532 ?????????????????????????????????????????????????????? ??????2???????????? NULL ?????????????????????1????????????
mysql> CREATE TABLE varchar_size_demo(
-> c VARCHAR(65532)
-> ) CHARSET=ascii ROW_FORMAT=Compact;
Query OK, 0 rows affected (0.02 sec)
?????? VARCHAR ??????????????? NOT NULL ?????????????????????????????? 65533 ???????????????????????????????????????????????????????????? 2????????????????????? NULL ????????????
mysql> DROP TABLE varchar_size_demo;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE varchar_size_demo(
-> c VARCHAR(65533) NOT NULL
-> ) CHARSET=ascii ROW_FORMAT=Compact;
Query OK, 0 rows affected (0.02 sec)
?????? VARCHAR(M) ??????????????????????????? ascii ????????????????????????????????????????????????
mysql> DROP TABLE varchar_size_demo;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE varchar_size_demo(
-> c VARCHAR(65532)
-> ) CHARSET=gbk ROW_FORMAT=Compact;
ERROR 1074 (42000): Column length too big for column 'c' (max = 32767); use BLOB or TEXT i nstead
mysql> CREATE TABLE varchar_size_demo(
-> c VARCHAR(65532)
-> ) CHARSET=utf8 ROW_FORMAT=Compact;
ERROR 1074 (42000): Column length too big for column 'c' (max = 21845); use BLOB or TEXT i nstead
??????????????????????????????????????? VARCHAR(M) ??????????????????????????? ascii ??????????????? M ???????????????????????????????????? ?????????????????????????????????????????????????????????????????? NULL ??????????????? gbk ??????????????????????????????????????? 2 ?????? ?????????????????????????????? M ????????????????????? 32766 (???????????? 65532/2)?????????????????????????????? 32766 ????????????
utf8 ??????????????????????????????????????? 3 ???????????????????????????????????? M ????????????????????? 21844 ??????????????????????????? 21844 (???????????? 65532/3)????????????
????????????
?????????????????????????????????NULL???????????????gbk????????????M?????????????????????32766???utf8????????????M???????????? ?????????21844???????????????????????????????????????????????????????????????????????????????????????????????????(??????????????? ?????????????????????)??????????????????????????????????????????65535????????????
1.3.4.2 ???????????????????????????????????????
????????? ascii ??????????????? varchar_size_demo ?????????????????????????????????
mysql> CREATE TABLE varchar_size_demo(
-> c VARCHAR(65532)
-> ) CHARSET=ascii ROW_FORMAT=Compact;
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('a', 65532) ?????????????????????????????????????????????????????? 'a' ?????? 65532 ???????????????????????????
?????? MySQL ?????????????????????????????????????????? ??? ??????????????? MySQL ?????? ??? ???????????????????????????????????????????????? ????????????????????????????????? ??? ?????????????????????????????????????????? 16KB ???????????? 16384 ?????????????????? VARCHAR(M) ??? ?????????????????????????????? 65532 ????????????????????????????????????????????????????????????????????????????????????
??? Compact ??? Reduntant ???????????????????????????????????????????????????????????? ????????????????????? ?????????????????????????????? ??????????????????????????????????????????????????????????????????????????? ????????????????????? ??????20??????????????????????????????????????? (?????????20?????????????????????????????????????????????????????????????????????????????????)???????????????????????????????????????????????? ???????????????
????????????????????????????????? Compact ??? Reduntant ???????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????? 768 ???????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????? ????????? ??????????????? 768 ????????????????????????????????? ????????? ?????????????????????????????????
??????????????????????????? ????????? VARCHAR(M) ???????????????????????? TEXT???BLOB ????????????????????????????????????????????? ???????????? ????????? ???
1.3.4.3 ?????????????????????
????????? ????????? ??????????????????????????????????????????????????????????????????????????????????????? ????????? ???
MySQL ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????? varchar_size_demo ?????????????????????????????? c ????????????????????????????????????????????????????????????????????? ??????????????????????????? ????????? ????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 136 ????????? ?????????(???????????????????????????????????????)???????????????????????????????????????????????????
???????????????????????????????????? 27 ?????????
???27????????????????????????????????????
2??????????????????????????????????????????
1?????????????????????????????????NULL???
5???????????????????????????
6???????????? row_id ???
6???????????? transaction_id ???
7???????????? roll_pointer ???
?????????????????????????????????????????????n??????????????? ????????? ????????????????????????????????????
136 + 2??(27 + n) > 16384
???????????????????????????????????? n > 8098 ????????????????????????????????????????????????????????? 8098 ??????????????????????????????
????????? ????????????????????? ????????? ??????????????? 8098 ???????????????????????????????????????????????? varchar_size_demo ?????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????? ????????? ????????????
1.3.5 Dynamic???Compressed?????????
??????????????????????????????????????? Dynamic ??? Compressed ?????????????????????????????? MySQL ????????? 5.7 ????????????????????? ????????? Dynamic ????????????????????? Compact ???????????????????????????????????? ????????? ????????????????????????????????????????????? ??????????????????????????????????????????????????? 768 ?????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????
Compressed ???????????? Dynamic ????????????????????? Compressed ??????????????????????????????????????????????????????????????????
??????
1.4 ??????
1. ?????? MySQL ???????????????????????????????????????????????? MySQL ???????????????????????????????????????
2. ??????????????????????????????????????????
CREATE TABLE ?????? (????????????) ROW_FORMAT=???????????????
ALTER TABLE ?????? ROW_FORMAT=???????????????
3. InnoDB ???????????????4????????????
COMPACT?????????
?????????????????????
Redundant?????????
?????????????????????
Dynamic???Compressed?????????
??????????????????????????? COMPACT????????? ??????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????768??????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????
????????? Compressed ??????????????????????????????????????????????????????
4. ?????????????????? 16KB ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????? ????????? ???