相同数据的数据文件大小差异?

时间:2016-09-12 02:49:42

标签: mysql innodb mariadb

我使用MariaDB 10.1.16

这次我做的很简单。

从oracle 中选择数据并生成 csv文件 使用 load infile data 命令在MariaDB中加载。 数据库引擎是InnoDB。

数据行计数为6497641。 两个表都创建相同的查询。 PK是auto_increment和int type;

由......创建的行

  1. TABLE1 - 加载infile数据......
  2. TABLE2 - 在TABLE2中插入select * from TABLE1 ...
  3. 表的大小在下面。

    1. TABLE1 - 3.3GBytes
    2. TABLE2 - 1.9GBytes
    3. 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)
      3. 我想知道为什么文件的大小不同。

        谢谢。

1 个答案:

答案 0 :(得分:1)

行的顺序可以产生很大的不同。如果数据在插入时按PRIMARY KEY排序,则块将几乎已满。如果行是随机排序的,则最终结果将是大约69%已满的块。这是插入BTree的本质。

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

由于PK与数据“聚集”,因此clustered_index_size是数据的大小,加上PK上BTree的一些开销。加上很多开销和/或浪费的空间(如上所述)。