我有两个服务器,一个是dev,另一个是datalake。
我有gui工具在usp_get_data
上调用存储过程dev
,这个开发过程需要来自dev
表的各种数据和来自datalake
服务器的一些数据使用链接服务器。从dev
和inside usp_get_data
我调用一个proc usp_getdata_datalake
,它使用动态查询来处理不同的场景,并使用datalake.datalakedb.dbo.sp_executesql @dynamicquery
从链接的服务器获取数据。
问题是这个动态查询包含一个视图和一些其他非常庞大而且速度慢的表,我在循环中使用它,因为涉及很多场景和计算。
我想从临时表中datalake
的一个慢视图中获取数据,然后在使用动态qyery时,我可以在动态qyery中使用该临时表,因此它不会再次获取视图以进行优化,因为{{ 1}}方法很慢,但临时表在existinv
中是不可用的,因为我在循环之前在datalake
env中创建了它。
我应该怎样做才能优化我的代码。
答案 0 :(得分:0)
那么我首先要看一下SSMS中的预计执行计划: Getting to Estimated Execution Plan in SSMS
从那里你可以看到SQL proc中真正的阻塞点/资源密集型块,它们可以作为优化的起点:
尝试使用while循环替换和游标,特别是如果您有一个已排序的数据集。在大多数情况下,while循环将提供更好的性能,但不是所有时间。