我有一个带有GUID PK的数据库,并且我理解添加INT IDENTITY
列(例如ClusterID
),然后在其上创建聚簇索引会带来的性能优势。GUID PK + INT IDENTITY聚簇索引+合并复制+外键
而对于连接,使用ClusterID
列作为外键会带来性能上的好处。特别是在父/子情况下,子表可以在父母ClusterID
上有聚集索引。
但是在合并复制的情况下,这是不可能的,因为ClusterID
列不一定是唯一的。
所以我想知道在这种情况下如何最好地获得性能优势。
例如:
表A
- ID GUID(主键)
- 丛集编号INT标识(聚簇索引)`
表B
- ID GUID (主键)
- TableAID GUID(外键表A)
- TableAClusterID INT(聚集索引)`
我想我会使用触发器来保持TableAClusterID
跟上时代的。
然后查询如
select *
from TableB B
where B.TableAClusterID = @TableAClusterId
将受益于更高的性能。
这是如何完成的?
你在说什么性能好处?插入性能?不成? – Ben
为什么ClusterID在合并复制方案中不是唯一的?如果您使用自动身份范围管理,那么保证ID将是唯一的。 –
@Ben - 虽然http://www.sqlskills.com/blogs/kimberly/the-clustered-index-debate-continues/接近,但我从所阅读的内容中找不到一篇文章总结了它即使列中没有使用数据,性能通常也会随着聚集索引而提高。 –