mysql - 相同数据的数据文件大小有何不同?

标签 mysql innodb mariadb

我使用 MariaDB 10.1.16

这次我做了非常简单的工作。

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

数据行数为 6497641。 两个表都创建相同的查询。 PK为auto_increment,int类型;

行创建者...

  1. TABLE1 - 加载文件内数据...
  2. TABLE2 - 插入到 TABLE2 选择 * from TABLE1...

表格大小如下。

  1. 表 1 - 3.3GBytes
  2. 表2 - 1.9GBytes

mysql.innodb_table_stats中的内容如下。

  1. 表 1:n_rows(5438171)、clustered_index_size(196096)、sum_of_other_index_sizes(12853)
  2. 表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/

相关文章:

mysql - 我无法在 Ubuntu 22.04 上安装 Mariadb

html - 如何在 MySQL 函数中将 SQL 选择查询转换为格式化的 HTML 表

javascript - 当按下提交按钮而不是页面刷新时重新加载php脚本

mysql - 如何导入数据库,更新已更改的产品,删除已删除的产品

mysql - InnoDB:试图打开以前打开的表空间

MySQL 无法替换换行符

mysql - MariaDB JDBC 驱动程序与 SQL Server 相比无法有效地批量更新

mysql联合与全文搜索错误

具有大量数据的 PHP DateTime 错误

php - Windows 2003 服务器崩溃 - 从 2008 开始 - MySQL IBData1 文件仅显示默认表