2

我一直在仅使用数据类型 int 的主键创建数据库表,并且我一直有很好的性能,但需要使用可更新订阅者设置合并复制。

这些表使用典型的主键、数据类型 int 和标识增量。设置合并复制,我必须将 rowguid 添加到所有表中,并使用 newsequentialid() 函数作为默认值。我注意到 rowguid 具有可索引性并且想知道我是否需要主键?

是否可以有 2 个索引,主键 int 和 rowguid?合并复制表的最佳布局是什么?我是否保留 int id 以便于行引用并仅删除索引但保留主键?不知道走什么路线,谢谢。

4

2 回答 2

1

请记住,如果您删除 int id 列并将其替换为 GUID,您可能需要重新处理大量数据和查询。你真的想做这样的查询吗:

select * from orders where customer_id = '2053995D-4EFE-41C0-8A04-00009890024A'  

请记住,如果您的 id 暴露给任何用户(通常是客户,因为客户表通常没有自然键,因为名称不是唯一的),他们会发现 guid 进行研究令人生畏。

在现有系统中两者兼有并没有错。在新系统中,您可以计划不使用 int,但如果您尝试在已经使用它们的系统中删除它们,则存在引入错误的巨大风险。

于 2012-01-09T19:15:07.077 回答
0

用 guid(我知道)替换整数主键的唯一缺点是 GUID 更大,所以 btree(使用的索引空间)会更大,如果你有这个表的外键(你也会需要更改)最终可能会在(可能)许多表中使用更多空间。

于 2012-01-09T18:39:02.847 回答