Почему объявление переменной таблицы выполняется очень медленно по сравнению с временной таблицей?

Мой фоновый процесс - массовое обновление/вставка данных. Мне нужно сохранить некоторые данные во временной таблице для последующего использования. У меня есть 5 временных таблиц. Если я использую временную таблицу (CREATE TABLE #T), то это займет 2-3 секунды, но если я использую табличную переменную (DECLARE @T TABLE), то это займет более 90 секунд. Вот пример временной таблицы,

CREATE TABLE #TempAttributes
(
    AID int
    ,PID int
    ,ATypeValue nvarchar(MAX)
    ,ATypeKey nvarchar(MAX)
    ,PLanguageID int
);

Почему табличная переменная очень медленная?


person user960567    schedule 23.01.2014    source источник
comment
TempTbl-TblVar Пост, написанный @Martin Smith, очень лаконичен и подробен, это должно быть то, что вы ищете.   -  person Kiril Rusev    schedule 23.01.2014


Ответы (1)


Я предполагаю, что это связано с тем, что вставка табличных переменных не поддерживает параллельный план.

Параллельная обработка запросов — это процесс оптимизации параллельных запросов, который реализован в MsSql, и временная таблица выигрывает от этого, а табличная переменная — нет.

Это одна из основных причин, почему мы не используем табличную переменную для большого набора данных (когда область действия не имеет значения).

Дополнительную информацию см. здесь.

person Athanasios Kataras    schedule 23.01.2014