Как оптимизировать, где предложение SQL Server запрос - PullRequest
0 голосов
/ 25 апреля 2018

Таблица Сотрудник

ID Name DOJ
------------------
1   A   2018-12-12
2   B   2018-11-12
......

Запрос:

SELECT NAME 
FROM Employee 
WHERE YEAR(DOJ) = 2018

Имея огромные объемы данных в таблице employee, как это оптимизировать?

Ответы [ 4 ]

0 голосов
/ 25 апреля 2018

Вы можете добавить индекс в столбец DOJ или разбить таблицу на год, как вы говорите, это огромная таблица

0 голосов
/ 25 апреля 2018

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

SELECT NAME FROM Employee WHERE DOJ >= '2018-01-01' AND DOJ <= '2018-12-31'

Также убедитесь, что в столбце DOJ есть Index. Проверьте это - Sargable Query

0 голосов
/ 25 апреля 2018

Чтобы ускорить запрос, вы можете создать INDEX в DOJ поле:

CREATE INDEX idx_doj ON Employee (DOJ);
0 голосов
/ 25 апреля 2018

Вы можете избежать функции в предложении where как

SELECT NAME 
FROM Employee e
WHERE DOJ >= '20180101' and DOJ <= '20181231';

Таким образом, этот запрос будет называться SARGable , который может использовать индекс, если он уже существует

Для текущего запроса используйте любую функцию в предложении where, которая сделает запрос non-sargable . Таким образом, оптимизатор SQL не может использовать индекс для DOJ, даже если он существует.

Крошечный совет всегда используйте ANSI SQL Формат даты YYYYMMDD

...