unix db2 BIGINT Vs Decimal作为主键

unix db2 BIGINT Vs Decimal作为主键,db2,Db2,如果我们在DB2-BIGINT或Decimal(13,0)类型中将其中一个设置为主键,那么需要建议哪种数据类型能够提供更好的性能 我怀疑十进制(13,0)将有问题,一旦关键成长为一个非常大的大小,但我想一个更好的答案/理解这一点 谢谢。使用BIGINT: 可存储约19位数字(与13位相比) 将占用8个字节(而不是7或13个字节-请参阅下一步) 根据平台的不同,DECIMAL将以的形式存储,例如,在iSeries上(我不记得它是打包的还是分区的)。很遗憾,无法与其他部署通信 您没有对这些值进行数

如果我们在DB2-BIGINT或Decimal(13,0)类型中将其中一个设置为主键,那么需要建议哪种数据类型能够提供更好的性能

我怀疑十进制(13,0)将有问题,一旦关键成长为一个非常大的大小,但我想一个更好的答案/理解这一点


谢谢。

使用
BIGINT

  • 可存储约19位数字(与13位相比)
  • 将占用8个字节(而不是7或13个字节-请参阅下一步)
  • 根据平台的不同,
    DECIMAL
    将以的形式存储,例如,在iSeries上(我不记得它是打包的还是分区的)。很遗憾,无法与其他部署通信
  • 您没有对这些值进行数学运算(例如“下一个条目”不计算)-保存测量值/值的
    十进制数
    /
    数值

请注意,实际上,ID只是一个位序列-它恰好是一个整数(通常)这一事实是不相关的。最好把它们看作是随机数据;顺序分配是一个优化细节,经常会有间隙(回滚、系统崩溃等),除了加入之外,它们对任何事情都没有意义。

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

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

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

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