【问题标题】:MySQL: Decimal(5,0) vs INT(11) for integers from 0 to 99999 - performance and disk spaceMySQL:从 0 到 99999 的整数的 Decimal(5,0) vs INT(11) - 性能和磁盘空间
【发布时间】: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


    【解决方案1】:

    从一些初步测试来看,无论您使用 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 必须将数字转换为处理器实际可以使用的格式,在这种情况下可能是整数,并且可能存在与格式之间来回转换相关的某种开销。

    【讨论】:

    • 谢谢。我直觉上也是这么想的。
    • 我想我找到了更好的解决方案 - mediumint(9) - 3 个字节,[-8388608 ... 8388607]。谢谢!
    【解决方案2】:

    这在很大程度上取决于您使用的 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

    【讨论】:

    • 因此,对于 MySQL 5.1 及更高版本,关于您的链接,Decimal(5,0) 需要 3 个字节。您能否介绍一下 SELECT 查询 Decimal(5,0) 与 int(11) 的性能?谢谢。
    • 这只是一个数字,根本不应该有任何可衡量的性能差异。
    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2015-10-26
    相关资源
    最近更新 更多