SQL Server:NEWID()总是提供唯一的ID吗?

use*_*739 18 sql database sql-server unique newid

NEWID()功能是否从未给我提供与之相同的ID?假设我选择a NEWID()并返回'1'(仅作为示例).它永远不会再回归'1'吗?这不可能吗?

Jot*_*aBe 19

双方NEWID()NEWSEQUENTIALID()给出类型的全球唯一的值uniqueidentifier.

NEWID() 涉及随机活动,因此下一个值是不可预测的,执行起来较慢.

NEWSEQUENTIALID()不涉及随机活动,因此可以预测下一个生成的值(不容易!)并且执行速度快于NEWID().

因此,如果您不关心预测的下一个值(出于安全原因),您可以使用NEWSEQUENTIALID().如果您担心可预测性,或者您不介意可以使用的微小性能损失NEWID().

但是,从严格意义上讲,不同机器生成的GUID具有相同值的机会仍然可以忽略不计.在实践中,它被认为是不可能的.

如果您想了解更多信息,请阅读:生成GUID的哪种方法最适合确保GUID真正唯一?

注意NEWID()符合RFC 4122.另一个函数使用Microsoft的算法来生成值.


LCI*_*III 7

如果您在NEWID()同一台机器上运行,则返回值将始终是唯一的,因为它在计算中包含当前时间戳.

但是,在不同的机器/系统上,您可以从技术上获得相同的ID,但发生这种情况的可能性非常低,以至于今天的SQL DB社区基本上已经接受了它是不可能的.微软或多或少地在其上树立了声誉.

有关