我有一个使用 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)
性能怎么样(这个表被查询了很多)?
慢点。它以二进制编码的十进制形式存储,因为它是一个任意精度值。
对于您的所有问题,最终答案是否定的。整数始终是您可以使用它的任何方法。(比如钱)
想一想。当数据库引擎遇到一个整数时,它会非常有效地处理它,因为对它没有太多解释。它是一个整数。数字类型的行为更像字符串。引擎首先要弄清楚小数点前后有哪些部分,并适当地按摩它们以进行数字运算。
使用整数总是比数字更有效,尽管数字类型对人类来说通常更方便。