Объявление переменной значительно увеличивает время запроса

#sql #sql-server #variables

Вопрос:

У меня есть существующий запрос, который я использую для обновления таблицы:

 SELECT ...
FROM ...
INTO ...
WHERE ... AND date >= '2021-07-01' AND date < '2021-07-05'
 

Существует довольно много JOIN WHERE предложений и, но запрос возвращает 1,5 млн строк и выполняется за ~6 секунд.

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

 DECLARE @date1 AS DATE = '2021-07-01'
DECLARE @date2 AS DATE = '2021-07-05'
SELECT ...
FROM ...
INTO ...
WHERE ... AND date >= @date1 AND date < @date2
 

Этот запрос идентичен первому, за исключением предварительного объявления дат, но теперь выполнение этого кода занимает значительно больше времени — я отменил его через ~20 минут.

Есть какие-нибудь идеи о причинах и/или решениях?

Комментарии:

1. «У меня есть существующий запрос, который я использую для обновления таблицы:» Это утверждение не является UPDATE ; это CREATE таблица с определением , основанным на столбцах, возвращенных из SELECT , а затем INSERT SELECT загружает в нее данные из. Он не выполняет ничего подобного UPDATE .

2. Я считаю, что проблема в плане запросов. Не могли бы вы попробовать добавить опцию «опция (перекомпиляция)».

3. Каков тип данных вашего столбца date ?

4. @Larnu Это первый шаг в более длинном коде, который обновляет таблицу в конце, но, вероятно, непосредственно для вопроса я не должен был использовать слово «обновление». Тип данных столбца-это (date, not null)

5. @CetinBasoz Я никогда раньше не использовал эту опцию, но я обязательно рассмотрю ее.