Проблемы с производительностью таблиц CTE и Temp - PullRequest
1 голос
/ 11 июля 2019

Запрос, над которым я работал некоторое время, был заполнен 7 временными таблицами, пока мне не пришлось заменить их на CTE (7 CTE), поскольку OPENQUERY выдает следующую ошибку при использовании TempTables:

Обнаружение метаданных поддерживает только временные таблицы при анализе пакета с одним оператором.

Когда я запускаю запрос с временными таблицами, продолжительность запуска составляет: 7:50

КогдаЯ запускаю Запрос с CTE, продолжительность выполнения: 15:00

Почти вдвое больше времени!Есть ли какая-либо другая альтернатива OPENQUERY, которая могла бы заставить его работать быстрее при сохранении моих временных таблиц?

Текущий запрос выполнения:

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

Я использовал это для справки: Хранимая процедура и заполнение таблицы Temp из связанной хранимой процедуры с параметрами

И нужно оптимальное решение.

Открыто для предложений!

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Можете ли вы использовать EXEC ... AT SERVER? Это работало нормально для меня:

EXEC ('CREATE TABLE #TestTable1 (ID int); CREATE TABLE #TestTable2 (ID int); SELECT * FROM #TestTable1, #TestTable2;') AT LinkedServer;
0 голосов
/ 12 июля 2019

Я решил свою проблему и просто заменил свой запрос на выполнение следующим образом:

EXEC (@Qsql) AT [servername]

Это поддерживает временные таблицы, а также избавило от любых других проблем с производительностью, которые у меня были.

Надеюсь, это поможет.

...