Om du redan använder analytics (ROW_NUMBER() OVER ...
) att sedan lägga till ytterligare en analytisk funktion på samma partitionering kommer att lägga till en försumbar kostnad för frågan.
Å andra sidan finns det många andra sätt att göra paginering, ett av dem med rownum
:
SELECT *
FROM (SELECT A.*, rownum rn
FROM (SELECT *
FROM your_table
ORDER BY col) A
WHERE rownum <= :Y)
WHERE rn >= :X
Denna metod kommer att vara överlägsen om du har ett lämpligt index i beställningskolumnen. I det här fallet kan det vara mer effektivt att använda två frågor (en för det totala antalet rader, en för resultatet).
Båda metoderna är lämpliga, men i allmänhet är det mer effektivt att använda analys om du vill ha både antalet rader och en sidnumreringsuppsättning, eftersom du bara frågar raderna en gång.