У меня есть следующая проблема в SQL Server 2005: попытка вставить некоторые строки в табличную переменную занимает много времени по сравнению с той же вставкой с использованием временной таблицы.
Это код для вставки в табличную переменную
DECLARE @Data TABLE(...)
INSERT INTO @DATA( ... )
SELECT ..
FROM ...
Это код для вставки во временную таблицу
CREATE #Data TABLE(...)
INSERT INTO #DATA( ... )
SELECT ..
FROM ...
DROP TABLE #Data
Временная таблица не имеет ключей или индексов, часть выбора одинакова для двух запросов, а число результатов, возвращаемых выбором, составляет ~ 10000 строк. Время, необходимое для выполнения одного выбора, составляет ~ 10 секунд.
Версия временной таблицы занимает до 10 секунд, мне пришлось остановить версию переменной таблицы через 5 минут.
Я должен использовать переменную таблицы, потому что запрос является частью функции табличного значения, которая не разрешает доступ к временной таблице.
План выполнения для версии табличной переменной
План выполнения для версии временной таблицы
EXEC
какую-либо функцию ... думаю, я ошибсяInvalid use of a side-effecting operator 'INSERT EXEC' within a function.
, Работа вокруг может работать , хотя.OPENQUERY
Табличные переменные иногда медленнее, потому что нет статистики по табличным переменным, и поэтому оптимизатор всегда предполагает только одну запись.
Однако я не могу гарантировать, что это именно тот случай, вам нужно взглянуть на информацию «оценочных строк» в плане запроса для табличной переменной.
источник