Mengatasi IN
batas tidak efisien dan JPA tidak selalu merupakan alat yang tepat untuk pekerjaan itu. Pertimbangkan hal berikut:
-
Ribuan nilai terikat akan menghasilkan SQL yang berpotensi megabyte. Ini akan memakan waktu lama untuk mengirim SQL ini ke database. Basis data mungkin membutuhkan waktu lebih lama untuk membaca teks SQL daripada menjalankannya sesuai Jawaban Tom untuk pertanyaan "Batas dan konversi sangat panjang IN:WHERE x IN ( ,,, ...)" pertanyaan .
-
Ini akan menjadi tidak efisien karena penguraian SQL. Tidak hanya membutuhkan waktu lama untuk menguraikan SQL yang panjang ini, tetapi setiap permintaan memiliki jumlah parameter terikat yang berbeda yang akan diuraikan dan direncanakan secara terpisah (lihat artikel ini menjelaskannya ).
-
Ada batasan keras dari parameter terikat dalam pernyataan SQL. Anda dapat mengulangi
OR
beberapa kali untuk mengatasiIN
batas tetapi Anda akan mencapai batas pernyataan SQL di beberapa titik.
Untuk jenis kueri tersebut, biasanya lebih baik membuat sementara tabel
. Buat satu sebelum kueri Anda, masukkan semua pengenal ke dalamnya dan gabungkan dengan tabel entitas dalam kueri Anda untuk mensimulasikan IN
kondisi.
Idealnya, Anda dapat mengganti JPA dengan prosedur tersimpan, terutama jika Anda menarik puluhan ribu pengenal dari database hanya untuk meneruskannya kembali ke database di kueri berikutnya.