У меня есть процесс ETL, который включает хранимую процедуру, которая сильно использует операторы SELECT INTO
(минимально регистрируемые и, следовательно, быстрее, поскольку они генерируют меньше трафика журнала). Из серии работ, которая имеет место в одной конкретной сохраненной хранимой процедуре, некоторые из самых дорогих операций - это энергичные буферы, которые, как представляется, просто заполняют результаты запроса, а затем копируют их в только что выполненную таблицу.
Документация MSDN на энергичные буферы довольно скудна. Кто-нибудь имеет более глубокое понимание того, действительно ли это необходимо (и при каких обстоятельствах)? У меня есть несколько теорий, которые могут или не могут иметь смысл, но не удастся устранить их из запросов.
Файлы .sqlplan довольно большие (160kb), поэтому я думаю, что, вероятно, нецелесообразно публиковать их непосредственно на форуме.
Итак, вот несколько теорий, которые могут поддаваться конкретным ответам:
- В запросе используются некоторые UDF для преобразования данных, такие как синтаксический анализ форматированных дат. Требуется ли это преобразование данных, чтобы использовать горячие катушки для выделения чувствительных типов (например, длин varchar) в таблицу до того, как она их построит?
- Как расширение вопроса выше, имеет ли кто-нибудь более глубокое представление о том, что делает или не управляет этой операцией в запросе?