Я пытаюсь заказать записи по 3 столбцам, а затем выбрать конкретный идентификатор и запись до этого плюс строку после этого. Вот мой вопрос:Эффективный способ написать этот запрос
;With Cte As
(
SELECT ROW_NUMBER() Over(Order By Book, PageINT, [IDAuto]) as RowNum, [IdAuto]
FROM CCWiseInstr2
)
Select * From Cte
Where RowNum = (Select RowNum From Cte
Where IdAuto = 211079)
UNION
Select * From Cte
Where RowNum = (Select RowNum - 1 From Cte
Where IdAuto = 211079)
UNION
Select * From Cte
Where RowNum = (Select RowNum + 1 From Cte
Where IdAuto = 211079)
Что мог бы другой эффективный способ написать этот запрос. На данный момент запрос занимает около 336 ms
после создания всех индексов, которые выглядят немного выше для меня.
Вот план для запроса:
http://gyazo.com/9a7f1c37d4433665d0949acf03c4561c
Любая помощь приветствуется.
Какая версия SQL Server? У вас есть индекс на IDAuto? –
Sql server 2012 с тегом в вопросе. Да IDAuto - это кластеризованный индекс. –
И у меня есть некластеризованный индекс на (Book, PageINT, IDAuto) как 1 индекс. У меня около 0,4 миллиона строк в таблице. –