同一数据的数据文件大小不同?

Difference in datafile size on a same data?

我使用 MariaDB 10.1.16

这次我做的很简单

Select 来自 oracle 的数据 并制作 csv 文件 使用 load infile data 命令将其加载到 MariaDB 中。 数据库引擎是 InnoDB。

数据行数为 6497641。 table 都创建了相同的查询。 PK是auto_increment和int类型;

行创建者...

  1. TABLE1 - 载入文件数据...
  2. TABLE2 - 插入 TABLE2 select * 来自 TABLE1...

tables 的大小低于。

  1. TABLE1 - 3.3GBytes
  2. TABLE2 - 1.9GBytes

mysql.innodb_table_stats中的内容如下。

  1. TABLE1:n_rows(5438171),clustered_index_size(196096),sum_of_other_index_sizes(12853)
  2. TABLE2:n_rows(6407131),clustered_index_size(106048),sum_of_other_index_sizes(12273)

我想知道为什么文件大小不同。

谢谢。

行的顺序会有很大的不同。如果数据在插入时按 PRIMARY KEY 排序,则块将被塞满。如果行随机排序,最终结果将是大约 69% 满的块。这就是插入BTree的本质。

n_rows 只是一个近似值,因此计数不一致。另一对值,我认为是 16KB 块的确切数量。

由于 PK 是 "clustered" 与数据,clustered_index_size 是数据的大小,加上 PK 上 BTree 的一些开销。再加上很多开销 and/or 浪费了 space(如上所述)。