Являются ли следующие SQL-запросы проблемными или хорошими с точки зрения производительности? - PullRequest
0 голосов
/ 03 октября 2018

Может кто-нибудь сказать мне, является ли следующий запрос хорошим или плохим с точки зрения производительности?

CREATE INDEX tbl_index ON tbl_example(column1, column2)

SELECT ID, column1, column2
FROM tbl_example
WHERE column1 = @param1
AND   column2 = @param2

SELECT ID, column1, column2
FROM tbl_example
WHERE column2 = @param2

1 Ответ

0 голосов
/ 03 октября 2018

На самом деле ни один запрос не может использовать индекс.В первом запросе предложение 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)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...