如果您的表最多有10条记录,并且在许多其他表(通过FK关系)中引用它,每个表中至少有1,000,000条记录。
如果永远不会使用复制,您会建议什么类型的PK(GUID或tinyint)? 我跟随后续摘录进入this page:
一旦超过,SQL Server上的Guid可以比数字类型执行更快 在现代硬件上大约100,000行。这是由于索引 优化(guid块的级联)MS实现了
在我的情况下GUID会表现得更快吗?
提前致谢;)
答案 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