2014-01-23 14 views
0

如果我们将其中的一个设置为DB2中的主键 - BIGINT或Decimal(13,0)类型,需要哪些数据类型可以提供更好的性能?unix db2 BIGINT Vs作为主键的十进制数

我怀疑十进制(13,0)将有问题一旦密钥增长到一个非常大的尺寸,但我想要更好的回答/理解。

谢谢。

回答

1

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

在另一方面,DB2将读取BigInt有,它不需要任何进一步的处理。该数字在缓冲池中。

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

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

0

使用BIGINT

  • 可储存〜19位(相对于13)
  • 采取8个字节(而不是也许7或13 - 见下)
  • 根据平台,DECIMAL将以Binary Coded Decimal的形式存储 - 例如,在iSeries上(并且我不记得它是打包还是分区)。不幸的是,无法与其他部署交流。
  • 对于这些数值(类似于“下一个条目”的东西不计算),您没有在做数学 - 为测量值/值保存DECIMAL/NUMERIC

需要注意的是,真的,IDS只是位的序列 - 事实上,它发生是一个整数(通常)是无关紧要的。最好将它们视为随机数据;顺序分配是一个优化细节,通常有差距(回滚,系统崩溃,不管),而且除了加入之外,它们都没有意义。