Я просто хочу убедиться, что я на правильном пути с этими концепциями, поэтому любая обратная связь будет принята с благодарностью.
Вот моя теория из запроса, который я только что оптимизировал, путем проб и ошибок и чтения документации MSDN.
Запрос
DECLARE @pic_id int
SET pic_id = 1
SELECT ROW_NUMBER() OVER (ORDER BY pic_date desc) AS row_num, *
FROM tbl_pics
WHERE deleted = 0 AND map_id = 1 AND (hidden = 0 OR pic_id = @pic_id)
Индекс
CREATE NONCLUSTERED INDEX [IX_tbl_pics] ON [dbo].[tbl_pics]
(
[map_id] ASC,
[deleted] ASC,
[pic_date] DESC
)
INCLUDE ( [hidden], [pic_id] )
Существует также индекс PK на pic_id
Теория
Ключевые столбцы таковы, потому что они используются либо в предложении WHERE (но не используются в ситуации OR), либо в ORDER BY.
Неключевые (INCLUDE) столбцы как таковые, потому что они используются в WHERE, а потому что они используются в сценарии ИЛИ, они не могут (не могут = не улучшить производительность) быть ключевым столбцом.
Эти предположения верны? Если нет, то что мне не хватает?
Спасибо!
источник