На самом деле ни один запрос не может использовать индекс.В первом запросе предложение WHERE
может использовать индекс.Однако в дополнение к column1
и column2
вы также выбираете ID
.Индекс не включает значение ID
, что означает, что SQL Server должен будет выполнить поиск в кластеризованном индексе, чтобы найти это значение.Учитывая стоимость такого поиска, оптимизатор может вообще не использовать индекс.
Для второго запроса предложение WHERE
ограничивается использованием column2
.К сожалению, column2
не образует самую левую часть индекса, поэтому индекс нельзя использовать и в этом запросе.
Вот пример запроса, который должен иметь возможность использовать индекс:
SELECT column1, column2
FROM tbl_example
WHERE column1 = @param1
AND column2 = @param2;
Также будет работать следующее:
SELECT column1, column2
FROM tbl_example
WHERE column1 = @param1;
Вы также можете придерживаться самого первого запроса и вместо этого включить столбец ID
в листовой узел индекса:
CREATE INDEX tbl_index ON tbl_example(column1, column2) INCLUDE (ID)
Это должно позволить вашему первому первому запросу использовать индекс.