Nếu bạn đã sử dụng phân tích (ROW_NUMBER() OVER ...
) thì việc thêm một hàm phân tích khác trên cùng một phân vùng sẽ thêm chi phí không đáng kể cho truy vấn.
Mặt khác, có nhiều cách khác để phân trang, một trong số đó là sử dụng rownum
:
SELECT *
FROM (SELECT A.*, rownum rn
FROM (SELECT *
FROM your_table
ORDER BY col) A
WHERE rownum <= :Y)
WHERE rn >= :X
Phương pháp này sẽ ưu việt hơn nếu bạn có một chỉ số thích hợp trên cột đặt hàng. Trong trường hợp này, có thể hiệu quả hơn nếu sử dụng hai truy vấn (một cho tổng số hàng, một cho kết quả).
Cả hai phương pháp đều thích hợp nhưng nói chung nếu bạn muốn cả số hàng và tập hợp phân trang thì sử dụng phân tích sẽ hiệu quả hơn vì bạn chỉ truy vấn các hàng một lần.