Пожалуйста, опубликуйте план (ы) выполнения, а также точное определение таблицы, включая все индексы.
Когда вы используете переменную, оптимизатор не знает, какую селективность будет иметь запрос, @LastSeenWorkflowIDможет отфильтровывать все, кроме самых последних нескольких строк в Workflow, или может включать их все.Сгенерированный план должен работать в обеих ситуациях.Существует порог, при котором поиск диапазона по кластеризованному индексу становится более дорогим, чем полное сканирование некластеризованного индекса, просто потому, что кластеризованный индекс намного шире (он включает каждый столбец в конечных уровнях) и, следовательно, имеетнамного больше страниц для повторения.Сгенерированный план, который учитывает неизвестное значение для @LastSeenWorkflowID, вероятно, пересекает этот порог при оценке стоимости поиска по кластеризованному индексу и поэтому выбирает сканирование по некластерному индексу.узкий индекс, предназначенный специально для этого запроса:
CREATE INDEX WorkflowSubId ON Workflow(ID, SubId);
или:
CREATE INDEX WorkflowSubId ON Workflow(ID) INCLUDE (SubId);
Такой индекс слишком хорош для передачи для вашего запроса, независимо от значения@ LastSeenWorkflowID.