Получение результатов более быстрым способом - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь получить значения для разбивки на страницы. Мне нужно 20 записей для каждой страницы. Так что в зависимости от номера страницы я запрашиваю, как указано ниже. Я хочу, чтобы запрос занимал минимальное время при получении значений

«page» содержит значение номера страницы, на котором я сейчас присутствую.

Select * FROM Table_A where Name Like lower('see%k%') 
ORDER BY Name OFFSET (page-1)*20 ROWS FETCH NEXT 20 ROWS ONLY

Я видел смещение не хорошо, если у нас много совпадающих значений, нам придется анализировать множество значений, когда яЯ на последней странице. Пожалуйста, предложите лучший поисковый запрос.

1 Ответ

0 голосов
/ 25 сентября 2019

Вы можете просто сделать это по-старому.Основывайтесь на этих примерах из продуктов.Найдите первую страницу:

SELECT TOP(@PageSize) ProductID, Description
FROM dbo.Products 
ORDER BY ProductID;

Затем запомните последнее возвращенное значение и запросите следующую страницу:

SELECT TOP(@PageSize) ProductID, Description
FROM dbo.Products 
WHERE ProductID > @LastProductID
ORDER BY ProductID;

Затем, чтобы вернуться на страницу, запомните первое возвращенное значение, а затем что-токак это:

SELECT * 
FROM (SELECT TOP(@PageSize) ProductID, Description
      FROM dbo.Products 
      WHERE ProductID < @FirstProductID
      ORDER BY ProductID DESC) AS SelectedProducts
ORDER BY ProductID;

Это обычно намного превосходит OFFSET и FETCH NEXT

...