CTE和温度表性能问题

时间:2019-07-11 13:21:39

标签: sql sql-server common-table-expression temp-tables

我已经处理了一段时间的查询填充了7个临时表,直到由于使用TempTables时OPENQUERY给出以下错误,我不得不将它们替换为CTE(7个CTE):

  

元数据发现仅在分析单语句批处理时支持临时表。

当我运行带有临时表的查询时,运行时间为: 7:50

当我使用CTE运行查询时,运行时间为: 15:00

几乎翻倍的时间!是否有其他替代OPENQUERY的方法可能会使它运行得更快,同时又可能保留我的临时表?

当前执行查询:

SET @XSql = 'SELECT * FROM OPENQUERY([server], ''' + REPLACE(@QSql, '''', '''''') + ''')'
EXEC(@XSql)

我以此为参考:Stored Procedure and populating a Temp table from a linked Stored Procedure with parameters

并且需要一个最佳的解决方案。

欢迎提出建议!

2 个答案:

答案 0 :(得分:1)

您可以使用EXEC ... AT SERVER吗?这对我来说很好:

EXEC ('CREATE TABLE #TestTable1 (ID int); CREATE TABLE #TestTable2 (ID int); SELECT * FROM #TestTable1, #TestTable2;') AT LinkedServer;

答案 1 :(得分:0)

我已经解决了问题,我只是将执行查询替换为以下内容:

EXEC (@Qsql) AT [servername]

这支持Temp Tables,并且摆脱了我遇到的任何其他性能问题。

希望这会有所帮助。