GUID与Int

时间:2009-09-29 09:29:46

标签: sql-server

如果您的表最多有10条记录,并且在许多其他表(通过FK关系)中引用它,每个表中至少有1,000,000条记录。

如果永远不会使用复制,您会建议什么类型的PK(GUID或tinyint)? 我跟随后续摘录进入this page

  

一旦超过,SQL Server上的Guid可以比数字类型执行更快   在现代硬件上大约100,000行。这是由于索引   优化(guid块的级联)MS实现了

在我的情况下GUID会表现得更快吗?

提前致谢;)

6 个答案:

答案 0 :(得分:4)

您没有说明引用table_with_10_rows的表中的行数...如果这些表的行数超过100k,则可能是。

答案 1 :(得分:3)

如有疑问,请说明。但是在表格中有10行我怀疑你会发现任何不同。

答案 2 :(得分:3)

小N的速度都很快。只需使用与数据库其余部分一致的PK类型。

答案 3 :(得分:3)

INT会更快 - 毫无疑问。并且也使用更少的空间(好吧,有10行,它确实没有太大的区别)。

INT是IMO也更容易使用:

SELECT (list of fields)
FROM dbo.MyTable
WHERE ID = 5

更容易编写和记忆
SELECT (list of fields)
FROM dbo.MyTable
WHERE OID = '8D1E4C8C-54B9-4EB2-B123-FC07E340EC7B'

所以我几乎总是(在95%以上的情况下)投票给INT而不是GUID。

此外,因为GUID作为SQL Server中的群集密钥(主键默认为)对于性能而言非常糟糕(请阅读“{索引女王”的GUIDs as Primary Keys and/or the clustering key博客文章,Kimberly Tripp了解有关主题),我只想尽可能使用INT(可能是:INT IDENTITY)作为我的主键和集群键。

马克

答案 4 :(得分:0)

如果你可以保证你的桌子永远不会有超过10条记录,那么我会坚持使用整数。该评论似乎仅适用于非常大的表(> 100,000行)。

答案 5 :(得分:0)

如此少的记录应该考虑的另一个选择是使用tinyint而不是int。请参阅此处支持和反对的参数:SOF question