序列会比 SELECT MAX(id) 提供任何性能提升吗?

Mik*_*son 0 sql-server azure-sql-database

我正在重构数据库。有一个过程在两个表中的一个中插入一行,并且 id 需要在两个表中是唯一的。

目前,应用层会遍历预定的键数组。

我正在考虑 aSequence生成下一个 id,与 a 相关联SELECT MAX(id) + 1

使用 Sequence 是否可以实现任何性能提升?

Rem*_*anu 5

SELECT MAX(id)+1;不正确,即使在轻度并发下也无法工作,因为多个进程会找到相同的 MAX,然后尝试插入相同的下一个值。

一个序列是正确的,所以从定义好,但不一定是最好的。它应该用作列上的 DEFAULT 约束。

到目前为止,最简单的解决方案是简单地使用IDENTITY列。

  • @ypercubeᵀᴹ 不要抓住那个。显然不是。SEQUENCE 仍然应该用作 DEFAULT 约束,而不是在 INSERT 之前的往返中查询。 (2认同)