我有一個帶有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/接近,但我從所閱讀的內容中找不到一篇文章總結了它即使列中沒有使用數據,性能通常也會隨着聚集索引而提高。 –