【问题标题】:What is the Storage Requirement for Decimal(2,1)?Decimal(2,1) 的存储要求是什么?
【发布时间】:2011-12-17 08:04:30
【问题描述】:

MySQL 5.6 manual 中说:

DECIMAL(和 NUMERIC)列的值使用二进制格式表示,该格式将九个十进制(以 10 为基数)数字打包成四个字节。每个值的整数和小数部分的存储分别确定。每个九位数字的倍数需要四个字节,而“leftover”数字需要四个字节的一部分。多余位数所需的存储空间如下表所示:

+----------------------------------+
|Leftover Digits | Number of Bytes |
+----------------------------------+
|       0        |        0        |
+----------------------------------+
|       1        |        1        |
+----------------------------------+
|       2        |        1        |
+----------------------------------+
|       3        |        2        |
+----------------------------------+
|       4        |        2        |
+----------------------------------+
|       5        |        3        |
+----------------------------------+
|       6        |        3        |
+----------------------------------+
|       7        |        4        |
+----------------------------------+
|       8        |        4        |
+----------------------------------+

我的问题是,如果小数点每边的数字都小于 9,它还会用完 4 个字节还是会被视为“leftovers”?

【问题讨论】:

  • 从摘录中听起来只有“剩菜”用于,但是......例如6 位是:0 个 9 位组(0 个字节)+ 1 个 6 位组(3 个字节)。不过,7/8 位的“剩余”仍然需要完整的 4 个字节。我对这个问题的回答——很可能是错误的——是 1 + 1 = 2 个字节。是否有客观的方法来衡量 MySQL 中使用的实际空间?可以肯定地说:)
  • @pst:是的,我认为直接测量是最客观的。我只是想知道为什么手册中没有明确说明它并认为有人可以向我展示正确的解释。

标签: mysql data-storage


【解决方案1】:

在将一些列添加到六行数据后,我使用MyISAM 表进行了一些测量,通过比较表dec.MYD 的文件大小来获得答案。这是我得到的:

Original:
-rw-rw----. 1 mysql mysql   54 Dec 17 18:49 dec.MYD

Add one column of DECIMAL(2,1):
-rw-rw----. 1 mysql mysql   66 Dec 17 18:51 dec.MYD

Further add one column of DECIMAL(4,1):
-rw-rw----. 1 mysql mysql   84 Dec 17 18:51 dec.MYD

结论:

DECIMAL(2,1) requires (66-54)/6 = 2 bytes in total
DECIMAL(4,1) requires (84-66)/6 = 3 bytes in total

请注意,测试并不是那么直接,因为第一列似乎总是 7 个字节,无论它是 DECIMAL(2,1) 还是 INT。您需要添加更多列才能重现上述结果。

【讨论】:

    猜你喜欢
    • 2011-10-29
    • 1970-01-01
    • 2011-10-30
    • 2016-03-04
    • 2016-10-25
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多