使用newid和newsequentialid的复合主键

时间:2010-01-08 21:34:28

标签: sql-server primary-key

我知道使用newid生成的GUID不适合用于性能问题的主键。

使用{newsequentialid(),newid()}的复合主键如何保证新GUID大于之前生成的GUID?

这里是否存在性能问题?

您可能会想到为什么有人会这样做,但我正在编写代码分析规则,并且不知道用户会做些什么疯狂的事情:)

由于

1 个答案:

答案 0 :(得分:4)

这比使用newid()创建的直接单个GUID更糟糕。

为什么?

  • 它仍然是完全随机的(因为newid()部分)因此导致大量索引碎片
  • 它是单个GUID的两倍,使得所有非聚集索引更加臃肿且效率更低(32个字节与INT IDENTITY的4个字节)

所以我建议:

  • 坚持使用newsequentialid()作为PK的默认值,如果你真的想要并需要一个GUID风格的PK
  • 使用INT / BIGINT IDENTITY获得最佳性能(如果不需要复制)

这是你有两个最好的选择。请参阅Kimberly Tripp关于为什么随机GUID对于群集密钥非常糟糕的选择的优秀文章: