1

我使用 SSMS 2016。我有一个包含几百万条记录的视图。该视图没有被索引,也不应该被服务器上的作业每 5 分钟更新一次(插入、删除、更新),然后在 GUI 中向客户端调用应用程序显示更新数据集。

该视图将大量的 INT 值转换为 VARCHAR 并附加一些字符串值。

该视图还对 NULL 执行一些 CAST 操作,为它们分配列名别名。最严重的性能损失是视图在 20 列上使用 FOR XML PATH('') 函数。

此外,该视图使用两个 CTE 作为源以及 Subsidiaries 来定义单个列值。

我确保创建了视图 Select、JOIN 和 WHERE 子句中使用的正确索引(集群、非集群、复合和覆盖)。

Database Tuning Advisor 也没有提出任何可以显着提高性能的建议。

作为一种解决方法,我决定创建两个相同的物理表,每个表上都有聚簇索引,并使用 Merge 语句(进一步转换为 SP,然后转换为 SQL Server 代理作业)维护它们的更新。并确保视图不会长时间锁定。然后,我将在每次合并完成后立即交换(重命名)表名。因此,在这种情况下,所有繁重的工作负载都落在 SQL Server 代理作业上,以保持表的更新。

问题是考虑到当前数据的大小,合并将需要大约 15 分钟,这在未来可能会增加。因此,我需要进行实时设计以确保视图具有最新的信息。

有任何想法吗?

4

0 回答 0