sybase - 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 到 101 --> 应该跳到 110,保持 50 的差距。
这种行为是预期的还是我错过了什么?
解决方案
您误解了身份差距设置的工作原理。发生的情况是您的身份差距值 (50) 立即作为一个块进入内存,然后根据需要进行分配(即值 1 到 50)。当所有值都被使用时,此时将采用一个新块。
如果实例在所有第一个块被使用之前被杀死,则下一个块被分配(51-100,因为之前分配了 1-50),因此下一个标识值集是 51。
身份差距设置确保您永远不会获得超过50 的值集作为值之间的跳跃,而不是绝对差距值。
这就是为什么在大量插入的表上不要将标识间隙设置得太低很重要,因为每次获取所有值时不断分配小块值可能会对性能造成小的影响。例如,在命中率非常高的表上,您可能需要考虑 1000 甚至 10000 的身份差距,以防止不断分配值块。
推荐阅读
- android - 将 Kotlin Arraylist 中的每个单词大写
- php - 在下拉标题中显示选定选项(不同的 href)
- java - 如何在 java 中为 Diameter Stack 创建 Session-Id?
- c# - 将委托 VB 转换为 C#
- android - 开发服务器返回 403 react native
- linux - 如何在常见模式后显示单词重复的次数
- google-cloud-sql - 项目未启用 Cloud SQL API [sql-component.googleapis.com]
- java - 如何将属性文件中的属性注入 Spring 中的非托管类?
- angular - Angular 2 下拉选项翻译
- flutter - 如何给 Flutter 中的 PopUpMenuButton 一个高度?