Re: Необычная сортировка: какие индексы нужны?
От: vmpire Россия  
Дата: 06.10.20 15:48
Оценка:
Здравствуйте, Слава, Вы писали:


  Сгенерированный код sql
С>DECLARE @username NVarChar(100) -- String
С>SET     @username = N'XXXXXXXXX'
С>DECLARE @state_2 NVarChar(2) -- String
С>SET     @state_2 = N'KY'
С>DECLARE @skip Int -- Int32
С>SET     @skip = 900
С>DECLARE @take Int -- Int32
С>SET     @take = 20

С>SELECT
С>    [x].[rating],
С>    [x].[city],
С>    [x].[state],
С>    [x].[firstName],
С>    [x].[lastName],
С>    [x].[description],
С>    [x].[date]
С>FROM
С>    [dbo].[mytable] [x]
С>WHERE
С>    [x].[username] = @username 
С>ORDER BY
С>    IIF([x].[state] = @state_2, 1, IIF((NOT ([x].[state] = @state_2)), 0, NULL)) DESC,
С>    [x].[date] DESC
С>OFFSET @skip ROWS FETCH NEXT @take ROWS ONLY

С>Какие мне индексы следует навесить на таблицу, чтобы подобный запрос выполнялся максимально быстро?
Перепишите запрос вручную через union all (может быть можно и через linq, если использовать .Concat), а индекс сделайте на (state, date)
С>Будет ли подобный запрос давать стабильную сортировку, чтобы по ней так же стабильно работал пейджинг?
В рамках двух полей, по которым сортировка — да.
Если эти значения повторяются, то по другим полям — нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.