#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 Я никогда раньше не использовал эту опцию, но я обязательно рассмотрю ее.