Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

JPA và 1000 ID sử dụng trong Oracle IN Operator

Làm việc với IN giới hạn là không hiệu quả và JPA không phải lúc nào cũng là công cụ phù hợp cho công việc. Hãy xem xét những điều sau:

  1. Hàng nghìn giá trị bị ràng buộc sẽ dẫn đến khả năng là megabyte SQL. Sẽ mất nhiều thời gian để gửi SQL này đến cơ sở dữ liệu. Cơ sở dữ liệu có thể mất nhiều thời gian hơn để đọc văn bản SQL so với thực thi nó theo Câu trả lời của Tom cho câu hỏi" Giới hạn và chuyển đổi IN danh sách rất dài:WHERE x IN (,,, ...) " .

  2. Nó sẽ không hiệu quả do phân tích cú pháp SQL. Không chỉ mất nhiều thời gian để phân tích cú pháp SQL dài này mà mỗi lệnh gọi có một số tham số ràng buộc khác nhau sẽ được phân tích cú pháp và lập kế hoạch riêng (xem bài viết này giải thích nó ).

  3. Có một giới hạn cứng của các tham số ràng buộc trong một câu lệnh SQL. Bạn có thể lặp lại OR một vài lần để làm việc xung quanh IN nhưng bạn sẽ đạt đến giới hạn câu lệnh SQL tại một số điểm.

Đối với những loại truy vấn đó, tốt hơn nên tạo tạm thời bảng . Tạo một mã trước truy vấn của bạn, chèn tất cả các số nhận dạng vào đó và nối nó với bảng thực thể trong truy vấn của bạn để mô phỏng IN tình trạng.

Lý tưởng nhất là bạn có thể thay thế JPA bằng một thủ tục được lưu trữ, đặc biệt nếu bạn đang lấy ra hàng chục nghìn số nhận dạng từ cơ sở dữ liệu chỉ để chuyển chúng trở lại cơ sở dữ liệu trong truy vấn tiếp theo.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tạo chỉ mục văn bản cho tìm kiếm '% abc%'?

  2. Chèn một chuỗi có dấu ngoặc kép vào bảng

  3. SQL:AVG với giá trị NULL

  4. làm thế nào để chọn các bản ghi chẵn từ một bảng trong oracle?

  5. Cách xuất dữ liệu thành tệp CSV trong Oracle bằng quy trình PL SQL