同一数据的数据文件大小不同?
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类型;
行创建者...
- TABLE1 - 载入文件数据...
- TABLE2 - 插入 TABLE2 select * 来自 TABLE1...
tables 的大小低于。
- TABLE1 - 3.3GBytes
- TABLE2 - 1.9GBytes
mysql.innodb_table_stats中的内容如下。
- TABLE1:n_rows(5438171),clustered_index_size(196096),sum_of_other_index_sizes(12853)
- 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(如上所述)。
我使用 MariaDB 10.1.16
这次我做的很简单
Select 来自 oracle 的数据 并制作 csv 文件 使用 load infile data 命令将其加载到 MariaDB 中。 数据库引擎是 InnoDB。
数据行数为 6497641。 table 都创建了相同的查询。 PK是auto_increment和int类型;
行创建者...
- TABLE1 - 载入文件数据...
- TABLE2 - 插入 TABLE2 select * 来自 TABLE1...
tables 的大小低于。
- TABLE1 - 3.3GBytes
- TABLE2 - 1.9GBytes
mysql.innodb_table_stats中的内容如下。
- TABLE1:n_rows(5438171),clustered_index_size(196096),sum_of_other_index_sizes(12853)
- 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(如上所述)。