Masalah utama dengan Kasus 2 adalah bahwa dalam banyak kasus, seluruh rangkaian hasil kueri harus diperoleh dan kemudian diurutkan sebelum baris N pertama dapat dikembalikan - kecuali kolom ORDER BY diindeks dan Oracle dapat menggunakan indeks untuk menghindari pengurutan. Untuk kueri yang kompleks dan kumpulan data yang besar, ini bisa memakan waktu lama. Namun mungkin ada beberapa hal yang dapat Anda lakukan untuk meningkatkan kecepatan:
- Cobalah untuk memastikan bahwa tidak ada fungsi yang dipanggil di SQL bagian dalam - ini mungkin dipanggil 5 juta kali hanya untuk mengembalikan 20 baris pertama. Jika Anda dapat memindahkan panggilan fungsi ini ke kueri luar, panggilan tersebut akan dipanggil lebih sedikit.
- Gunakan petunjuk FIRST_ROWS_n untuk mendorong Oracle agar mengoptimalkan karena Anda tidak akan pernah mengembalikan semua data.
EDIT:
Pemikiran lain:Anda saat ini memberikan laporan kepada pengguna yang bisa mengembalikan ribuan atau jutaan baris, tetapi pengguna tidak pernah secara realistis membuka halaman melalui semuanya. Bisakah Anda tidak memaksa mereka untuk memilih jumlah data yang lebih kecil, mis. dengan membatasi rentang tanggal yang dipilih menjadi 3 bulan (atau apa pun)?