2012-06-25 24 views
5

Tôi muốn biết đó của bên dưới thực hiện tốt hơn về mặt thời gian để thực hiện truy vấn với 100k hồ sơ +MyBatis RowBounds vs Oracle truy vấn pagination sử dụng rownum và lồng subquery

1) của Oracle Pagination

SELECT * 
FROM (
    SELECT id, col1, col2, rownum rn 
    FROM (
     SELECT /*+ first_rows(50) */ id, col1, col2 
     FROM table1 
     ORDER BY id DESC 
    ) 
    WHERE rownum <= 50 
) 
WHERE rn >= 20; 

2) Phân trang bằng MyBatis RowBounds.

MyBatis RowBounds sử dụng JDBC bình thường và sau khi bắn lựa chọn, nó bỏ qua 20 bản ghi đầu tiên và sau đó tìm nạp 30 bản tiếp theo (số trang).

Ngoài ra, cách tiếp cận MyBatis sẽ chậm hơn khi số trang tăng lên khi có nhiều hàng hơn cần được bỏ qua?

Trả lời

1

Nói chung, trình điều khiển JDBC sẽ phải tìm nạp 20 hàng đầu tiên trên mạng để nói chung sẽ kém hiệu quả hơn việc viết truy vấn phân trang. Hình phạt đó sẽ lớn hơn khi bạn tìm nạp thêm trang.

Cả hai cách tiếp cận, nói chung, sẽ chậm hơn khi bạn tìm nạp các trang tiếp theo. Nhưng đó thường không phải là vấn đề-- nếu bạn đang phân trang kết quả, điều đó ngụ ý rằng người dùng sẽ không thực sự tìm nạp nhiều hơn một vài trang kết quả trước khi họ từ bỏ.

Các vấn đề liên quan