Vấn đề chính với Trường hợp 2 là trong nhiều trường hợp, toàn bộ tập kết quả truy vấn phải được thu thập và sau đó được sắp xếp trước đó N hàng đầu tiên có thể được trả về - trừ khi các cột ORDER BY được lập chỉ mục và Oracle có thể sử dụng chỉ mục để tránh sắp xếp. Đối với một truy vấn phức tạp và một tập hợp dữ liệu lớn, điều này có thể mất một chút thời gian. Tuy nhiên, bạn có thể làm một số điều để cải thiện tốc độ:
- Cố gắng đảm bảo rằng không có hàm nào được gọi trong SQL bên trong - những hàm này có thể được gọi 5 triệu lần chỉ để trả về 20 hàng đầu tiên. Nếu bạn có thể chuyển các lệnh gọi hàm này sang truy vấn bên ngoài, chúng sẽ được gọi ít hơn.
- Sử dụng gợi ý FIRST_ROWS_n để thúc đẩy Oracle tối ưu hóa vì thực tế là bạn sẽ không bao giờ trả lại tất cả dữ liệu.
CHỈNH SỬA:
Một suy nghĩ khác:bạn hiện đang trình bày cho người dùng một báo cáo có thể trả về hàng nghìn hoặc hàng triệu hàng, nhưng người dùng thực tế không bao giờ xem qua tất cả các hàng đó. Bạn có thể không buộc họ chọn một lượng dữ liệu nhỏ hơn, ví dụ:bằng cách giới hạn phạm vi ngày đã chọn trong 3 tháng (hoặc bất kỳ điều gì)?