Здравствуйте, Слава, Вы писали:
| Сгенерированный код 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)
С>Будет ли подобный запрос давать стабильную сортировку, чтобы по ней так же стабильно работал пейджинг?
В рамках двух полей, по которым сортировка — да.
Если эти значения повторяются, то по другим полям — нет.