GUID PK + INT IDENTITY聚簇索引+合并复制+外键

时间:2015-04-23 08:42:12

标签: sql-server

我有一个包含GUID PK的数据库,我了解添加INT IDENTITY列(例如ClusterID)然后在其上创建聚簇索引所带来的性能优势。

对于连接,使用ClusterID列作为外键可以获得性能优势。特别是在父/子情况下,子表可以在父ClusterID上具有聚簇索引。

但是在合并复制方案中,这是不可能的,因为ClusterID列不一定是唯一的。

所以我想知道在这种情况下如何最好地获得性能优势。

例如:

表A

  • ID guid(主键)
  • ClusterID int identity(聚集索引)`

表B

  • ID guid(主键)
  • TableAID guid(TableA的外键)
  • TableAClusterID int(聚集索引)`

我想我会使用触发器让TableAClusterID保持最新状态。

然后是查询,例如

select * 
from TableB B 
where B.TableAClusterID = @TableAClusterId

将从提高的表现中受益。

这是怎么做到的?

1 个答案:

答案 0 :(得分:0)

对于非常繁重的INSERTS GUID,其性能优于INT IDENTITY,因为您不会对其进行争用。有一些技术可以解决它,但它仍然可能是一个问题。在所有其他情况下INT/BIGINT表现更好。它们在很大范围内是独一无二的,尺寸比GUID小2-4尺寸。如果使用GUID将这些额外的12个字节乘以行数,然后乘以在群集GUID索引上构建的非聚簇索引的数量,您将看到该垃圾使用的数据库大小的%%。我假设,你的表现有相同的百分比下降,如果不是更多的话。尺寸总是很重要。