Использует ли план выполнения сервера индекс - PullRequest
0 голосов
/ 30 сентября 2018

Я добавил индекс для столбца «LastChangeDate» в таблице dbo.Employee.Будет ли план выполнения SQL Server использовать этот индекс в обоих случаях ниже?Может кто-нибудь объяснить, почему или почему нет.

SELECT EmployeeName  
FROM dbo.Employee  
WHERE DATEADD(MONTH, -2, LastChangeDate) >= ‘2016-01-01’ 

SELECT EmployeeName  
FROM dbo.Employee  
WHERE LastChangeDate >= ‘2016-01-01’ 

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

когда вы используете его как функцию, которую вы сначала выбрали, вы не можете, но для 2-го выбора, если вы использовали кластерный индекс, вы можете (вот почему я спрашиваю тип индекса, который вы использовали ...)

0 голосов
/ 30 сентября 2018

Первый не может использовать индекс, потому что LastChangeDate является аргументом функции.Единственная функция (насколько я знаю) в SQL Server, которая не запрещает индекс, - это преобразование в дату.

Вторая может использовать или не использовать индекс.Если у вас есть кластерный индекс на LastChangeDate, то он должен.Тем не менее, запрос, по-видимому, не очень избирателен - это означает, что он выбирает значительную часть всех строк.В таких случаях оптимизатор базы данных может отказаться от индекса и выполнить полное сканирование таблицы.

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