Sybase identity_gap 属性未保持指定的间隙

Sybase identity_gap attribute is not maintaining specified gap

我正在使用 Sybase Adaptive Server Enterprise 15.7,并且我创建了一个 table like

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

插入记录时,rollNum跳跃

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

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

这种行为是预期的还是我遗漏了什么?

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

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

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

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