对于SQL服务器,最好是为标识列使用uniqueidentifier(GUID)还是bigint?
答案 0 :(得分:48)
这取决于你在做什么:
int
可能就足够了。bigint
或顺序guid。Guid
真的很棒。 <强>更新强>
关于Guids的一些额外的(不那么明显的)笔记:
where id='xxx-xxx-xxxxx'
),但您也可以通过顺序guid(where id='xxx-xxx' + '123'
)获得一些回复。 'http://example.com?userid=xxxx'
并期望获得其他人帐户的结果。答案 1 :(得分:7)
一般情况下,我推荐BIGINT
超过GUID
(因为指针大而慢),但问题是,你甚至需要吗? (即你在复制吗?)
如果您期望行少于20亿行,那么传统的INT
就可以了。
答案 2 :(得分:4)
您是在进行复制还是有销售人员运行需要合并的断开连接的数据库,请使用GUID。否则我会选择int或bigint。从长远来看,它们更容易处理。
答案 3 :(得分:1)
不要求你需要的东西。数据库性能将从整数中获益,而GUID对于复制非常有用,并且不需要从数据库中回听已创建的身份,即代码可以在插入行之前创建GUID身份
答案 4 :(得分:1)
如果您计划使用合并复制,则ROWGUIDCOL
有利于提高性能(see here for info)。否则,我们需要更多关于“更好”的定义的信息;更好的是什么?
答案 5 :(得分:0)
这实际上取决于进来的信息是否有某种程度的顺序。我强烈推荐GUID可能更好的用户等用户。但是对于顺序数据,例如需要易于排序的订单或其他东西,bigint可能是一个更好的解决方案,因为它将被索引并提供快速排序而不需要另一个索引的成本。
答案 6 :(得分:0)
这取决于你是否期望在图片中复制。复制需要一行UUID,所以如果你打算这样做,你也可以预先做好。
答案 7 :(得分:0)
除非您真正需要GUID,例如能够在任何地方而不仅仅是在服务器上生成密钥,否则我会坚持使用基于INTEGER的密钥。 GUID的创建成本很高,并且使实际查看数据变得更加困难。另外,您是否曾尝试在SQL查询中键入GUID?这很痛苦!
答案 8 :(得分:0)
我和Andrew Rollings在一起。
现在你可以争论空间效率。 int是什么,最多8个字节?指导会持续更长时间。
但我有两个主要的偏好原因:可读性和访问时间。对于我而言,数字比GUID更容易(因为我总能轻松找到下一个/上一个记录)。
至于访问时间,请注意某些DB可能会开始出现GUID的大问题。我知道MySQL就是这种情况(MySQL InnoDB Primary Key Choice: GUID/UUID vs Integer Insert Performance)。这对SQL Server来说可能不是什么大问题,但需要注意的是。
我会坚持使用INT或BIGINT。我认为你想要GUID的唯一一次是当你要把它们给出时,并且不希望人们出于安全原因猜测其他记录的ID。
答案 9 :(得分:0)
使用GUID可能会有更多方面或要求。