DB2 v10 zos:识别自由索引值

时间:2014-09-03 17:12:20

标签: sql db2 zos

我的组织有数百个DB2表,每个表都有一个随机生成的唯一整数索引。随机值由COBOL CICS主机程序或Java分布式应用程序生成。采用的常规方法是随机生成一个整数值(仅使用正值),然后尝试插入数据行,在已经保留重复索引值时重试。我想提高这种方法的性能,我正在考虑尝试识别尚未生成并持久化到每个表的整数值,这意味着我们不需要重试。我们知道我们的插入会起作用。 db2是否有一个可以返回未使用的索引值的函数?

2 个答案:

答案 0 :(得分:1)

简短的回答是否定的。

稍微长一点的答案是指出,如果存在这样的函数,在你的情况下,在第一次插入到你的一个表中,它将返回的结果集的大小将是2,147,483,647(正)整数。每个4字节,即8,589,934,588字节。

考虑到现有系统的限制,您所做的可能是最好的。如果重试的性能是不可接受的,我担心重新设计你的密钥方案是下一步。

我认为这是一个值得提问的问题:这种使用随机数字表示唯一键的方案会导致性能问题吗?随着表格填满关键空间,您将看到越来越多的重试,但您有一个相对较大的密钥空间。如果你看到大量的重试,你的随机数可能不像你想的那么随机。

答案 1 :(得分:0)

只是一个想法,但你可以使用一个序列作为一组表。通过这种方式,该值仍然是随机的(因为你不知道你执行插入的下一个表是哪个),但是基于特定的序列,这意味着大多数时候你不会得到重试是因为号码不断上升。同样的Sequance可以在几百万次插入之后循环并开始填充空白"。

就其他关键想法而言,您也可以尝试使用不同的密钥,可能是基于Timestamp或Rowid的密钥。这仍然是随机的,但不是重复的。