Ако вече използвате анализи (ROW_NUMBER() OVER ...
) след това добавянето на друга аналитична функция към същото разделяне ще добави незначителна цена към заявката.
От друга страна, има много други начини за извършване на пагинация, единият от които използва rownum
:
SELECT *
FROM (SELECT A.*, rownum rn
FROM (SELECT *
FROM your_table
ORDER BY col) A
WHERE rownum <= :Y)
WHERE rn >= :X
Този метод ще бъде по-добър, ако имате подходящ индекс в колоната за подреждане. В този случай може да е по-ефективно да използвате две заявки (една за общия брой редове, една за резултата).
И двата метода са подходящи, но като цяло, ако искате както броя на редовете, така и набор от пагинация, тогава използването на анализ е по-ефективно, тъй като заявявате редовете само веднъж.