问题描述
我正在使用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 t0 101->应该将其跳到110,保持50的距离。
这是预期的行为还是我错过了什么?
解决方法
您误会了身份差距设置的工作原理。发生的情况是您的身份差距值(50)立即作为一个块存入内存,然后根据需要进行分配(即值1至50)。当所有值都用完后,此时将采用一个新块。
如果在所有第一个块都用完之前实例被杀死,则分配下一个块(因为先前分配了1-50,所以分配了51-100),因此下一个标识值集为51。
身份差距设置可确保您获得的值永远不会超过,因为这是一个介于值之间的跳跃,而不是绝对差距值。
这就是为什么在重插入的表上不要将标识间隙设置得太低很重要,因为每次获取所有值时不断分配小的值块可能会降低性能。例如,在一个命中率很高的表上,您可能需要考虑一个1000甚至10000的标识间隙,以防止不断分配值块。