SQL Server 身份差距:理解和缓解
概述
SQL Server 的 IDENTITY 属性通过自动递增整数值来简化主键管理。 然而,这个序列中可能会出现意想不到的间隙,让用户感到困惑。
根本原因:身份缓存
Microsoft 的文档解释说 SQL Server(2012 及更高版本)采用身份缓存来优化性能。 此缓存通常针对 int
IDENTITY 列设置为 1,000,预分配一个值块。
缓存大小的影响
该示例显示,由于 1,000 个值的缓存,身份增量跳跃了大约 100。 当分配像 1,206,321 这样的值时,接下来的 1,000 个将被保留,从而产生间隙。 一致的最后三位数字(例如 321)反映了保留块的结尾。
缩小差距的策略
虽然身份差距本身并不是问题,但它们可能是不可取的。 考虑以下选项:
ALTER DATABASE SCOPED CONFIGURATION
与 IDENTITY_CACHE = OFF
禁用特定数据库的缓存。重要注意事项
没有任何方法可以完全消除身份差距。 并发插入或事务失败仍然可以创建它们。 对于需要绝对序列完整性的应用程序,请考虑 GUID 或自定义序列生成机制。
以上是为什么我的 SQL Server 身份增量突然跳过值?的详细内容。更多信息请关注PHP中文网其他相关文章!