我一直只使用数据类型int的主键创建数据库表,而且我总是有很好的性能,但需要使用可更新的订阅者设置合并复制。
表使用典型的主键,数据类型int和标识增量。设置合并复制,我必须将rowguid添加到所有表,并使用newsequentialid()函数作为默认值。我注意到rowguid已经可索引,并且想知道我是否还需要主键?
是否可以拥有2个索引,主键int和rowguid?合并复制表的最佳布局是什么?我是否保留int id以便于行引用,只删除索引但保留主键?不知道要走哪条路,谢谢。
答案 0 :(得分:1)
请记住,如果删除int id列并将其替换为GUID,则可能需要重新处理大量数据和查询。你真的想做这样的查询:
select * from orders where customer_id = '2053995D-4EFE-41C0-8A04-00009890024A'
请记住,如果您的ID暴露给任何用户(通常在客户的情况下,因为客户表通常没有自然密钥,因为名称不是唯一的),他们会发现进行研究的指导令人生畏。
现有系统同时具有这两者并没有错。在新系统中,您可以计划不使用整数,但如果您尝试在已经使用它们的系统中删除它们,则存在引入错误的巨大风险。
答案 1 :(得分:0)
用guid(我所知道的)替换整数主键的唯一缺点是GUID更大,所以btree(使用的索引空间)会更大,如果你有这个表的外键(你还需要改变更多的空间可能最终被用于(可能)许多表格。