ALTER PROCEDURE [dbo].[SP_tblTest_SelectSpecificRecordsWithCTE]
@FromRow int = 1000000,
@PgSize int = 10
AS
BEGIN
;WITH RecordsRN AS
(
select ID, colValue, ROW_NUMBER() over(order by colvalue) as Num from tblTest
)
SELECT ID Value, colValue Text FROM RecordsRN WHERE Num between @FromRow AND (@[email protected])
END
to jest zapytanie, którego używam do stronicowania. użyj go, a otrzymasz ur pożądane 10 rekordów w ciągu 4-5 sekund. otrzymuję 10 rekordów w 3 sekundy, a całkowita liczba rekordów w mojej bazie danych wynosi 10 milionów, nie używaj top 10, za każdym razem przyniesie tylko te same 10 rekordów. w moim przypadku utrzymuję rozmiar strony i początkowy numer wiersza (@FromRow) w sesji i przekazuję te dwie wartości do poniższej procedury składowanej i otrzymuję wynik. Co więcej, jeśli używasz SQL 2012, możesz chcieć użyć OFFSET i Pobierz następne 10 wierszy. wyszukaj w google słowo kluczowe OFFSET, a na górze zobaczysz żądany wynik.
dzięki