Я изо всех сил пытаюсь получить правильный индекс для небольшого запроса, который я хочу выполнить. Мне было интересно, если у кого-нибудь есть какие-либо советы для такого рода запросов?
Мои столбцы таблицы:
Id int (not used in query) PK
DateField datetime
IntField1 int
IntField2 int
IntField3 int
IntField4 int
IntField5 int (Not used in query)
IntField6 int (Not used in query)
Мой запрос выглядит так
DECLARE @datefield datetime = '2019-01-01';
DECLARE @intfield1 int 1;
DECLARE @intfield2 int 2;
SELECT
SUM([sum])
FROM table1
WHERE
DATEPART(YEAR, [DateField]) = DATEPART(YEAR, @datefield)
AND DATEPART(MONTH, [DateField]) = DATEPART(MONTH, @datefield)
AND [IntField1] = @intfield1
AND [IntField2] = @intfield2
AND [IntField3] = [IntField4]
ЛучшийИндекс, который я нашел в плане выполнения, выглядит так:
CREATE INDEX idx_test_1 ON table1([DateField], [IntField1])
Я также пытался что-то вроде этого ...
CREATE INDEX idx_test_2 ON table1([DateField], [IntField1], [IntField2], [IntField3], [IntField4])
Но это оказалось хуже при исполненииplan
Я пытался следовать этому руководству, но любая другая помощь будет полезна.
https://www.sqlshack.com/sql-server-index-design-basics-and-guidelines/
Вот план выполнения для запроса
https://www.brentozar.com/pastetheplan/?id=SyW3LQk5r