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

问题描述

我正在使用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的标识间隙,以防止不断分配值块。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...