Se você já estiver usando análises (
ROW_NUMBER() OVER ...
), adicionar outra função analítica no mesmo particionamento adicionará um custo insignificante à consulta. Por outro lado, existem muitas outras maneiras de fazer paginação, uma delas usando
rownum
:SELECT *
FROM (SELECT A.*, rownum rn
FROM (SELECT *
FROM your_table
ORDER BY col) A
WHERE rownum <= :Y)
WHERE rn >= :X
Este método será superior se você tiver um índice apropriado na coluna de ordenação. Nesse caso, pode ser mais eficiente usar duas consultas (uma para o número total de linhas, uma para o resultado).
Ambos os métodos são apropriados, mas, em geral, se você deseja o número de linhas e um conjunto de paginação, usar a análise é mais eficiente porque você consulta as linhas apenas uma vez.