0

我正在使用 Sybase Adaptive Server Enterprise 15.7,并且我创建了一个类似的表

create table student(
rollNum int identity,
name varchar(16),
primary key(rollNum)
)with identity_gap = 50

插入记录时,rollNum 跳转

从 3 到 51 --> 应该跳到 53,保持 50 的差距。

从 60 到 101 --> 应该跳到 110,保持 50 的差距。

这种行为是预期的还是我错过了什么?

4

1 回答 1

1

您误解了身份差距设置的工作原理。发生的情况是您的身份差距值 (50) 立即作为一个块进入内存,然后根据需要进行分配(即值 1 到 50)。当所有值都被使用时,此时将采用一个新块。

如果实例在所有第一个块被使用之前被杀死,则下一个块被分配(51-100,因为之前分配了 1-50),因此下一个标识值集是 51。

身份差距设置确保您永远不会获得超过50 的值集作为值之间的跳跃,而不是绝对差距值。

这就是为什么在大量插入的表上不要将标识间隙设置得太低很重要,因为每次获取所有值时不断分配小块值可能会对性能造成小的影响。例如,在命中率非常高的表上,您可能需要考虑 1000 甚至 10000 的身份差距,以防止不断分配值块。

于 2020-10-27T08:03:29.167 回答