列的数字与整数 - 大小和性能

Ofi*_*ris 14 postgresql

我有一个使用 PostgreSQL 表的应用程序。该表非常大(数十亿行)并且有一列是整数。

integer可高达6个位数,即0-999,999,没有底片。

我想把它改成numeric(6,0).

这是个好主意吗?会numeric(6,0)占用更少的字节吗?性能怎么样(这个表被查询了很多)?

Cra*_*ger 15

这是个好主意吗?

不。

numeric(6,0)占用更少的字节?

不。

test=> SELECT pg_column_size(INT4 '999999'), pg_column_size(NUMERIC(6,0) '999999');
 pg_column_size | pg_column_size 
----------------+----------------
              4 |             10
(1 row)
Run Code Online (Sandbox Code Playgroud)

性能怎么样(这个表被查询了很多)?

慢点。它以二进制编码的十进制形式存储,因为它是一个任意精度值。


stu*_*ard 6

对于您的所有问题,最终答案是否定的。整数始终是您可以使用它的任何方法。(比如钱)

想一想。当数据库引擎遇到一个整数时,它会非常有效地处理它,因为对它没有太多解释。它是一个整数。数字类型的行为更像字符串。引擎首先要弄清楚小数点前后有哪些部分,并适当地按摩它们以进行数字运算。

使用整数总是比数字更有效,尽管数字类型对人类来说通常更方便。

  • @CraigRinger 我不认为你真的不同意我的观点!我同意使用小数表示货币对开发人员来说总是不那么尴尬,但问题是查询效率,对吧?处理整数总是更快。此外,在编写银行应用程序时,您可能会遇到一些大多数人不会关心但对银行非常重要的奇怪的舍入问题。所以,我也同意你不使用浮点数来赚钱! (2认同)