unix db2 BIGINT Vs Decimal作为主键

时间:2014-01-23 14:21:55

标签: db2

如果我们在DB2-BIGINT或Decimal(13,0)类型中将其中一个设置为主键,需要建议哪个Datatype可以提供更好的性能?

我怀疑Decimal(13,0)一旦密钥增长到一个非常大的尺寸就会出现问题,但我想要更好的回答/理解。

感谢。

2 个答案:

答案 0 :(得分:2)

十进制没有问题。唯一的问题是,一旦被读取,DB2必须执行更多操作来检索数据。我的意思是,DB2读取数据然后它应该找到小数部分(精度),即使它是0。

另一方面,DB2将读取BigInt,它不需要任何进一步的过程。该号码在缓冲池上。

如果你要使用13个位置的整数(大多数),可能十进制会更好,因为你不会使用额外的字节,但是小数有精确的额外字节。通过以这种方式使用十进制,您将优化存储,这将转换为更好的IO,更好的性能。但是,它取决于表的其他列。你必须测试哪一个能给你带来更好的表现。

使用压缩时,有更多的CPU周期来恢复信息。您必须测试性能是否受到影响。

答案 1 :(得分:0)

使用BIGINT

  • 可以存储~19位数(相​​对于13位)
  • 占用8个字节(相比可能是7个或13个 - 见下一个)
  • 根据平台,DECIMAL将以Binary Coded Decimal的形式存储 - 例如,在iSeries上(我不记得它是否已打包或已分区)。不幸的是,无法与其他部署交谈。
  • 您没有对这些值进行数学(“下一个条目”之类的事情不计算在内) - 为测量/值保存DECIMAL / NUMERIC。< / LI>

注意,实际上,id只是一个位序列 - 事实上发生是一个整数(通常)是无关紧要的。最好将它们视为随机数据;顺序赋值是一个优化细节,通常存在间隙(回滚,系统崩溃等等),除了加入之外,它们对于任何其他东西都没有意义。