CTE 和临时表性能问题
CTE & Temp Tables Performance Issue
我已经处理了一段时间的查询现在充满了 7 个临时表,直到我不得不用 CTE(7 个 CTE)替换它们,因为 OPENQUERY 在使用临时表时出现以下错误:
Metadata discovery only supports temp tables when analyzing a single- statement batch.
当我 运行 使用临时表查询时, 运行 持续时间是:
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
并且需要一个最优解。
接受建议!
可以使用EXEC ... AT SERVER
吗?这对我来说很好用:
EXEC ('CREATE TABLE #TestTable1 (ID int); CREATE TABLE #TestTable2 (ID int); SELECT * FROM #TestTable1, #TestTable2;') AT LinkedServer;
我已经解决了我的问题,我只是将我的执行查询替换为以下内容:
EXEC (@Qsql) AT [servername]
这支持临时表并且还消除了我遇到的任何其他性能问题。
希望对您有所帮助。
我已经处理了一段时间的查询现在充满了 7 个临时表,直到我不得不用 CTE(7 个 CTE)替换它们,因为 OPENQUERY 在使用临时表时出现以下错误:
Metadata discovery only supports temp tables when analyzing a single- statement batch.
当我 运行 使用临时表查询时, 运行 持续时间是:
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
并且需要一个最优解。
接受建议!
可以使用EXEC ... AT SERVER
吗?这对我来说很好用:
EXEC ('CREATE TABLE #TestTable1 (ID int); CREATE TABLE #TestTable2 (ID int); SELECT * FROM #TestTable1, #TestTable2;') AT LinkedServer;
我已经解决了我的问题,我只是将我的执行查询替换为以下内容:
EXEC (@Qsql) AT [servername]
这支持临时表并且还消除了我遇到的任何其他性能问题。
希望对您有所帮助。