Hvis du allerede bruger analytics (ROW_NUMBER() OVER ...
) og tilføjelse af en anden analytisk funktion på den samme partitionering vil tilføje en ubetydelig omkostning til forespørgslen.
På den anden side er der mange andre måder at lave paginering på, en af dem ved hjælp af rownum
:
SELECT *
FROM (SELECT A.*, rownum rn
FROM (SELECT *
FROM your_table
ORDER BY col) A
WHERE rownum <= :Y)
WHERE rn >= :X
Denne metode vil være overlegen, hvis du har et passende indeks på bestillingskolonnen. I dette tilfælde kan det være mere effektivt at bruge to forespørgsler (en for det samlede antal rækker, en for resultatet).
Begge metoder er passende, men generelt, hvis du ønsker både antallet af rækker og et pagineringssæt, er det mere effektivt at bruge analyser, fordi du kun forespørger på rækkerne én gang.