У меня проблемы с производительностью при использовании триггера SQL. Проблема связана с выполнением SQL-запроса при использовании оператора select с таблицей триггеров INSERTED.
SELECT x FROM y WHERE x IN ( SELECT x FROM INSERTED )
План выполнения запроса указывает на ( SELECT x FROM INSERTED )
, что занимает намного больше времени, чем ожидалось. Здесь мы говорим о 1000 строк.
Если я создаю табличную переменную и выбираю строки из INSERTED в табличную переменную, то использую табличную переменную в предложении IN, это НАМНОГО быстрее.
Мой вопрос: почему это быстрее? Я уже понял, что это может быть. Я читал, что таблица INSERTED - это виртуальная таблица, которая поступает из журналов транзакций и поэтому для ее чтения требуется гораздо больше времени, чем для использования переменной таблицы. Однако я бы подумал, что выбор строк из таблицы INSERTED в табличной переменной сведет на нет положительный эффект от использования табличной переменной в предложении IN.
Есть идеи, почему это намного быстрее?