【发布时间】:2011-11-16 01:25:54
【问题描述】:
Int(11) 是 4 个字节,对吗? Decimal(5,0) - 小数点前 5 和小数点后 0...我不确定它需要多少字节...(0..99999... 65536 需要两个字节)...所以那么 Decimal(5,0) 需要 3 个字节吗?
如果我们谈论性能,使用什么更好?
表是手动更改的(偶尔),因此只有从该表中选择。
【问题讨论】:
标签: mysql performance int decimal
Int(11) 是 4 个字节,对吗? Decimal(5,0) - 小数点前 5 和小数点后 0...我不确定它需要多少字节...(0..99999... 65536 需要两个字节)...所以那么 Decimal(5,0) 需要 3 个字节吗?
如果我们谈论性能,使用什么更好?
表是手动更改的(偶尔),因此只有从该表中选择。
【问题讨论】:
标签: mysql performance int decimal
从一些初步测试来看,无论您使用 INT(11) 还是 DECIMAL(5,0),似乎存储要求实际上是相同的。我使用以下查询创建了 2 个表。
CREATE TABLE Table1(id INT(11));
CREATE TABLE Table2(id DECIMAL(5,0));
在每个表中插入一个值并为两个表运行以下命令后,我看到每行的 DATA_LENGTH 为 7。插入额外的行会使任一表的大小增加 7 个字节。
SELECT * FROM INFORMATION_SCHEMA.tables where table_name='Table1';
与所有类似的东西一样,最简单的解决方法是创建一些表并进行验证。在这种情况下,我只会使用 INT(11),因为它似乎不需要任何额外的空间,并且可能需要更少的处理,因为整数是处理器可以直接处理的更原始的数据类型。使用 DECIMAL 时,MySQL 必须将数字转换为处理器实际可以使用的格式,在这种情况下可能是整数,并且可能存在与格式之间来回转换相关的某种开销。
【讨论】:
这在很大程度上取决于您使用的 MySQL 版本。
对于 MySQL 4,请参阅 http://dev.mysql.com/doc/refman/4.1/en/numeric-types.html。
对于 MySQL 5.0.3 及更高版本,请参阅http://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-changes.html。
对于 MySQL 5.1 及更高版本,请参阅http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html。
【讨论】: