我使用 MariaDB 10.1.16
这次我做了非常简单的工作。
从oracle中选择数据并制作csv文件 使用 load infile data 命令将其加载到 MariaDB 中。 数据库引擎是InnoDB。
数据行数为 6497641。 两个表都创建相同的查询。 PK为auto_increment,int类型;
行创建者...
- TABLE1 - 加载文件内数据...
- TABLE2 - 插入到 TABLE2 选择 * from TABLE1...
表格大小如下。
- 表 1 - 3.3GBytes
- 表2 - 1.9GBytes
mysql.innodb_table_stats中的内容如下。
- 表 1:n_rows(5438171)、clustered_index_size(196096)、sum_of_other_index_sizes(12853)
- 表2:n_rows(6407131)、clustered_index_size(106048)、sum_of_other_index_sizes(12273)
我想知道为什么文件大小不同。
谢谢。
最佳答案
行的顺序可能会产生很大的差异。如果数据在插入时按PRIMARY KEY
排序,则 block 将几乎被填满。如果对行进行随机排序,最终结果将是大约 69% 已满的 block 。这就是插入 BTree 的本质。
n_rows
只是一个近似值,因此计数不一致。我认为另一对值是 16KB block 的确切数量。
由于 PK 与数据“聚集”,因此 clustered_index_size
是数据的大小,加上 PK 上 BTree 的一些开销。再加上大量的开销和/或浪费的空间(如上所述)。
关于mysql - 相同数据的数据文件大小有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39442752/