Pokud již používáte analýzu (ROW_NUMBER() OVER ...
) pak přidání další analytické funkce do stejného rozdělení přidá na dotaz zanedbatelné náklady.
Na druhou stranu existuje mnoho dalších způsobů stránkování, jeden z nich pomocí rownum
:
SELECT *
FROM (SELECT A.*, rownum rn
FROM (SELECT *
FROM your_table
ORDER BY col) A
WHERE rownum <= :Y)
WHERE rn >= :X
Tato metoda bude lepší, pokud máte v objednávkovém sloupci odpovídající index. V tomto případě může být efektivnější použít dva dotazy (jeden pro celkový počet řádků, jeden pro výsledek).
Obě metody jsou vhodné, ale obecně platí, že pokud chcete jak počet řádků, tak sadu stránkování, pak je použití analýzy efektivnější, protože se na řádky dotazujete pouze jednou.