需要远程查看的proc的优化

时间:2018-05-17 18:49:51

标签: sql-server tsql

我有两个服务器,一个是dev,另一个是datalake。

我有gui工具在usp_get_data上调用存储过程dev,这个开发过程需要来自dev表的各种数据和来自datalake服务器的一些数据使用链接服务器。从devinside usp_get_data我调用一个proc usp_getdata_datalake,它使用动态查询来处理不同的场景,并使用datalake.datalakedb.dbo.sp_executesql @dynamicquery从链接的服务器获取数据。

问题是这个动态查询包含一个视图和一些其他非常庞大而且速度慢的表,我在循环中使用它,因为涉及很多场景和计算。

我想从临时表中datalake的一个慢视图中获取数据,然后在使用动态qyery时,我可以在动态qyery中使用该临时表,因此它不会再次获取视图以进行优化,因为{{ 1}}方法很慢,但临时表在existinv中是不可用的,因为我在循环之前在datalake env中创建了它。

我应该怎样做才能优化我的代码。

1 个答案:

答案 0 :(得分:0)

那么我首先要看一下SSMS中的预计执行计划: Getting to Estimated Execution Plan in SSMS

从那里你可以看到SQL proc中真正的阻塞点/资源密集型块,它们可以作为优化的起点:

Sample Execution Plan

尝试使用while循环替换和游标,特别是如果您有一个已排序的数据集。在大多数情况下,while循环将提供更好的性能,但不是所有时间。