为什么我的MySQL数据库的大小大于单个值所表示的大小?

为什么我的MySQL数据库的大小大于单个值所表示的大小?,mysql,Mysql,我存储了两列无符号整数,根据需要,每列应为4字节,我希望表的大小大约为行*8字节。单个表文件的扩展名为.ibd,如果我认为所有小表的起始值都是96 KB,请更正。当我进入行数较多的表时,表的大小会急剧增长,每行的字节数平均在30左右,如图所示。每个表的行数为2^k,每个k有一个表。第一列是主键 +--------+------------+----------+-------------+-------------+ | Size k | Rows | KB | B

我存储了两列无符号整数,根据需要,每列应为4字节,我希望表的大小大约为行*8字节。单个表文件的扩展名为.ibd,如果我认为所有小表的起始值都是96 KB,请更正。当我进入行数较多的表时,表的大小会急剧增长,每行的字节数平均在30左右,如图所示。每个表的行数为2^k,每个k有一个表。第一列是主键

+--------+------------+----------+-------------+-------------+
| Size k |    Rows    |    KB    |    Bytes    |     B/R     |
+--------+------------+----------+-------------+-------------+
|      1 |          2 |       96 |       98304 | 49152       |
|      2 |          4 |       96 |       98304 | 24576       |
|      3 |          8 |       96 |       98304 | 12288       |
|      4 |         16 |       96 |       98304 | 6144        |
|      5 |         32 |       96 |       98304 | 3072        |
|      6 |         64 |       96 |       98304 | 1536        |
|      7 |        128 |       96 |       98304 | 768         |
|      8 |        256 |       96 |       98304 | 384         |
|      9 |        512 |       96 |       98304 | 192         |
|     10 |       1024 |      128 |      131072 | 128         |
|     11 |       2048 |      160 |      163840 | 80          |
|     12 |       4096 |      208 |      212992 | 52          |
|     13 |       8192 |      336 |      344064 | 42          |
|     14 |      16384 |      560 |      573440 | 35          |
|     15 |      32768 |     9216 |     9437184 | 288         |
|     16 |      65536 |    10240 |    10485760 | 160         |
|     17 |     131072 |    12288 |    12582912 | 96          |
|     18 |     262144 |    15360 |    15728640 | 60          |
|     19 |     524288 |    23552 |    24117248 | 46          |
|     20 |    1048576 |    40960 |    41943040 | 40          |
|     21 |    2097152 |    69632 |    71303168 | 34          |
|     22 |    4194304 |   131072 |   134217728 | 32          |
|     23 |    8388608 |   253952 |   260046848 | 31          |
|     24 |   16777216 |   499712 |   511705088 | 30.5        |
|     25 |   33554432 |   995328 |  1019215872 | 30.375      |
|     26 |   67108864 |  1978368 |  2025848832 | 30.1875     |
|     27 |  134217728 |  3948544 |  4043309056 | 30.125      |
|     28 |  268435456 |  7892992 |  8082423808 | 30.109375   |
|     29 |  536870912 | 15773696 | 16152264704 | 30.0859375  |
|     30 | 1073741824 | 31543296 | 32300335104 | 30.08203125 |
|     31 | 2147483648 | 63074304 | 64588087296 | 30.07617188 |
+--------+------------+----------+-------------+-------------+
查看和,我发现这些表是以紧凑的格式存储的,根据数据库的平均长度约为28字节,而不是大多数表的30字节

HEADER = 5 + CEILING(N/8) + 1   = 7 bytes // N = 1 NULL field of the 2
TRANSACTION ID FIELD = 6        = 6 bytes
ROLL POINTER FIELD = 7          = 7 bytes
PRIMARY KEY (YES) = 0?          = 0 bytes
ACTUAL DATA (2 UINTS)           = 8 bytes
------------------------------------------
                                = 28 bytes

当我开始回答这个问题时,我做了大量的研究,并回答了我大部分的大尺寸问题,但我需要另一双眼睛来确保我看的对。另外,其他2个字节来自哪里

是否包含索引?根据,主键用作索引,因此使用第一列的4个字节。索引页的默认大小为16KB。插入新记录时,InnoDB会尝试保留页面的1/16空间,以便将来插入和更新索引记录。。。28/30和15/16有点相似。不过,我们讨论了多少索引页。是否足以在该表的整个.ibd文件大小中每行添加2个字节?