2014-09-28 27 views
0

我有我的数据库问题,我收集转储到其他数据库来分析它,我已创建表引用日期检查,所以当我看到我的界面phpmyadmin,我看到我的表大小相等于16Kio两个日期与ID!为什么我的数据相对于实际大小而言太大?

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

我不知道问题在哪里?

回答

2

是没有问题的,

在MySQL数据库不仅是数据,你必须考虑到使用的空间:

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

每种字段类型具有不同的存储方法。

转储文件只包含表格定义和数据作为SQL插入。

检查你的数据库结构和样品转储:

你的数据库中存储为InnoDBUTF8,在你的转储使用MyISAM存储与latin1,是一个很大的区别,因为UTF字符集使用更多的空间来存储字符串/ varchar数据和InnoDB使用额外的空间,因为该表物理存储在InnoDB文件中。

我选择转储文件和一个表,然后创建使用的是InnoDB与UTF8相同的表,请参阅尺寸的区别:

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

+0

是的,但有一个真正的问题,我有一年的转储分析,所以365 * 1.9Mo = 693M我知道其他人使用max 170Mo来分析我的模型365 * 5Mo = 1 825Mo!根本不可能! – Freddy 2014-09-28 14:52:47

+0

Mo是什么?是兆字节? – 2014-09-28 14:53:55

+0

您可以显示表格定义和样本数据吗? – 2014-09-28 14:55:24

0

表大小不是行数的简单倍数,更多与页面大小有关。对于单个页面,16KB听起来正确(请参阅mysql documentation)。你的两行将少于1页,所以1页就足够了。

还有其他的开销太大了索引,元数据等

BTW什么是Mo,一个Kio

相关问题