Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

ResultSet.next sangat lambat hanya ketika kueri berisi pembatasan FIRST_ROWS atau ROWNUM

Apakah Anda mendapatkan paket kueri yang berbeda saat menyertakan petunjuk? Asumsi saya adalah Anda melakukannya berdasarkan deskripsi masalahnya.

Saat Anda menjalankan kueri di Oracle, database umumnya tidak mewujudkan seluruh hasil yang ditetapkan pada titik waktu mana pun (jelas, mungkin harus jika Anda menentukan ORDER BY klausa yang mengharuskan semua data terwujud sebelum pengurutan terjadi). Oracle tidak benar-benar mulai mewujudkan data sampai klien mulai mengambil data. Ini menjalankan kueri yang cukup untuk menghasilkan berapa pun banyak baris yang diminta klien untuk diambil (yang kedengarannya seperti 10 dalam kasus Anda), mengembalikan hasil tersebut ke klien, dan menunggu klien meminta lebih banyak data sebelum melanjutkan memproses kueri.

Kedengarannya seperti ketika FIRST_ROWS petunjuk disertakan, rencana kueri berubah dengan cara yang membuatnya lebih mahal untuk dieksekusi. Jelas, itu bukan tujuan dari FIRST_ROWS petunjuk. Tujuannya adalah untuk memberi tahu pengoptimal untuk membuat rencana yang membuat pengambilan N baris pertama lebih efisien bahkan jika pengambilan semua baris dari kueri menjadi kurang efisien. Itu cenderung menyebabkan pengoptimal menyukai hal-hal seperti pemindaian indeks daripada pemindaian tabel di mana pemindaian tabel mungkin lebih efisien secara keseluruhan. Kedengarannya seperti dalam kasus Anda, bagaimanapun, perkiraan pengoptimal salah dan akhirnya memilih rencana yang umumnya kurang efisien. Itu sering menyiratkan bahwa beberapa statistik pada beberapa objek yang dirujuk oleh kueri Anda tidak lengkap atau salah.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gabungkan nilai yang berbeda dalam koleksi di SQL GROUP BY

  2. FROM kata kunci tidak ditemukan di tempat yang diharapkan (Oracle SQL)

  3. Prosedur untuk memperbarui tabel yang sudah terisi

  4. Oracle menggandakan baris N kali di mana N adalah kolom

  5. Apa peran dan hak istimewa yang diberikan kepada pengguna untuk melakukan CRUD (pada Oracle 12)