为什么我的数据相对于真正的大小而言太大了?

时间:2014-09-28 14:31:42

标签: mysql mysqldump

我的数据库有问题,我收集转储到其他数据库分析它,我已经创建表参考日期检查所以当我看到我的界面phpmyadmin时,我看到我的表大小等于16Kio两个日期与id!

我在这里看到了文件http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html 并且日期类型大小是3个字节...差异太大,我对所有数据都有问题! 一个转储的原始转储大小是1.9Mo,在我的数据库中,大小是5Mo!

我不知道问题出在哪里?

2 个答案:

答案 0 :(得分:2)

没有问题,

MySQL中的数据库不仅是数据,还必须考虑使用的空间:

  • 表格定义
  • 表索引(> =表数据)
  • 表格数据

每种字段类型都有不同的存储方式。

转储文件仅包含SQL插入的表定义和数据。

检查数据库结构和样本转储:

您的数据库存储为InnoDB UTF8,您的转储使用MyISAMlatin1存储,这是一个很大的区别,因为UTF字符集会占用更多空间存储字符串/ varchar数据和InnoDB使用额外的空间,因为该表实际存储在InnoDB文件中。

我选择转储文件和一个表,然后使用带有UTF8的InnoDB创建相同的表,请参阅大小差异

mysql> call tools.sp_status(database());
+---------------------+--------+-------+---------+-------------------+
| Table Name          | Engine | Rows  | Size    | Collation         |
+---------------------+--------+-------+---------+-------------------+
| BDDJoueurs          | MyISAM | 33981 | 2.47 Mb | latin1_swedish_ci |
| BDDJoueurs_unicode  | InnoDB | 33981 | 6.03 Mb | utf8_unicode_ci   |
+---------------------+--------+-------+---------+-------------------+

我认为您正在使用InnoDB进行分析,将整合数据更改为MyISAM可能是一个好主意,可以保留您的字符集。

注意:我使用自定义show table status

答案 1 :(得分:0)

表大小不是行数的简单倍数,更多与页面大小有关。 16KB听起来适合单个页面(参见mysql documentation)。你的两行不到1页,所以1页就够了。

索引,元数据等也有其他开销。

BTW什么是MoKio