SQL Server ->> Sequence(序列对象)

序列是一个对象,作用类似于数据库表的自增列性质,用于获取序列值。它的特点是:

1、不与特定表相关联,只能在INSERT语句通过调用NEXT VALUE FOR 函数来获取新的序列值

2、全局性

3、调用sp_sequence_get_range一次性获取一个序列范围(多个序列值)

4、可以升序或降序生成

5、可以定义最大值、最小值和数值间隔,超过最大值可以决定要不要从最小值开始循环

6、最重要一点,可以缓存,这点对于繁忙的应用程序太重要了。缓存序列值范围到内存,减少对磁盘IO的频繁访问。CACHE选项指定了缓存中缓存的序列数值多少个。缓存的情况下如果发生断电或者重启,缓存中的序列将丢失,重启后从下一个没有缓存的序列开始重新进入缓存。

 

缓存 vs 没有缓存

没有启用缓存的情况下,请求下一个序列值时:

1、计算下一个序列值。

2、将序列对象的新当前值写入系统表。

2、将计算的值返回给调用语句。

 

启用缓存的情况下,请求下一个序列值时:

1、计算下一个序列值

2、在内存中更新该序列对象的新当前值

3、将计算的值返回给调用语句

 

缓存用完时:

1、计算序列对象的下一个值。

2、计算新缓存的最后一个值。

3、锁定序列对象的系统表行,新缓存的最后一个值写入系统 表。 

 

 

参考:

CREATE SEQUENCE (Transact-SQL)

NEXT VALUE FOR (Transact-SQL)

sp_sequence_get_range (Transact-SQL)

posted @ 2022-06-08 21:42  Jerry_Chen  阅读(338)  评论(0编辑  收藏  举报