Простой запрос с другим планом выполнения при выполнении из агента заданий SQL - PullRequest
0 голосов
/ 21 декабря 2018

У меня довольно простой запрос:

IF EXISTS (SELECT 1 FROM system.RawEvent_pool1 WHERE ProcessedDate IS NULL)
EXECUTE [system].[usp_ProcessAuditData] '1'

У меня есть отфильтрованный индекс для system.RawEvent_pool1.

Он отфильтрован по ProcessedDate IS NULL (ProcessedDate включен в индекс)

Таким образом, индекс должен идеально соответствовать этому запросу.

Исходя из фактического плана выполнения, я могу сказать, что при выполнении из Management Studio индекс используется должным образом.

Но при выполнении точно такого же запроса в той же базе данных из агента заданий SQL индекс не используется.

Вместо этого план запроса использует кластеризованный индекс первичного ключа для таблицы.

Это можно увидеть в хранилище запросов.

Дополнительная информация: задание выполненовыполняется под другим аккаунтом.

Есть ли логическое объяснение этому поведению?

Тогда я бы хотел услышать это: -)

1 Ответ

0 голосов
/ 12 апреля 2019

Обнаружена причина.

В агенте заданий SQL по умолчанию для 'QUOTED_IDENTIFIER' установлено значение 'OFF'.

При выполнении команды SET QUOTED_IDENTIFIER ON оператор будет использовать ожидаемый план выполнения

Но я до сих пор понятия не имею, почему это работает.

...