我有一个包含GUID PK的数据库,我了解添加INT IDENTITY
列(例如ClusterID
)然后在其上创建聚簇索引所带来的性能优势。
对于连接,使用ClusterID
列作为外键可以获得性能优势。特别是在父/子情况下,子表可以在父ClusterID
上具有聚簇索引。
但是在合并复制方案中,这是不可能的,因为ClusterID
列不一定是唯一的。
所以我想知道在这种情况下如何最好地获得性能优势。
例如:
表A
表B
我想我会使用触发器让TableAClusterID
保持最新状态。
然后是查询,例如
select *
from TableB B
where B.TableAClusterID = @TableAClusterId
将从提高的表现中受益。
这是怎么做到的?
答案 0 :(得分:0)
对于非常繁重的INSERTS GUID,其性能优于INT IDENTITY
,因为您不会对其进行争用。有一些技术可以解决它,但它仍然可能是一个问题。在所有其他情况下INT/BIGINT
表现更好。它们在很大范围内是独一无二的,尺寸比GUID小2-4尺寸。如果使用GUID将这些额外的12个字节乘以行数,然后乘以在群集GUID索引上构建的非聚簇索引的数量,您将看到该垃圾使用的数据库大小的%%。我假设,你的表现有相同的百分比下降,如果不是更多的话。尺寸总是很重要。