Oracle biết giới hạn của 1000 yếu tố trong mệnh đề where a in (..)
. Liệu giới hạn này cũng tồn tại khi sử dụng Hibernate trong conjuction với Oracle?oracle nơi giới hạn 1000/hibernate
Trả lời
Giới hạn cơ sở dữ liệu này vẫn tồn tại với hibernate. Nếu bạn thực sự cần phải có nhiều hơn 1000 mục trong mệnh đề trong của bạn, bạn sẽ phải chia danh sách mình trong mã và chạy truy vấn cho mỗi khối 1000 phím, sau đó nối các tập kết quả lại với nhau.
Lưu ý lỗi này bị hỏng nếu truy vấn của bạn cần sắp xếp hoặc tổng hợp kết quả truy vấn vì toàn bộ kết quả sẽ chỉ được biết trong mã. Trong trường hợp này, bạn nên tìm một cách khác để viết truy vấn không yêu cầu mệnh đề IN
.
Có như Hibernate sẽ gọi Oracle tại một số sân khấu để giới hạn là mức thấp nhất của các giới hạn trong Hibernate và Oracle
Hibernate không có gì đặc biệt với dữ liệu cho một trong - chỉ cần vượt qua nó để cơ sở dữ liệu
Nó có vẻ là một lỗi trong Hibernate:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1123
Chúng tôi đã có cùng một vấn đề và giải quyết nó bằng cách tách nó ra thành các gói 100er khoản TRÊN
select * from mytable where id in (...) or id in (...).
Ghi chú:
- đảm bảo rằng bạn sử dụng các biến liên kết
- đảm bảo rằng truy vấn luôn giống nhau. Này được thực hiện bằng cách điền lên các điều khoản TRÊN với -1 đến khi bạn có 100 yếu tố trong nó
- cố gắng sử dụng luôn cùng một số ORed trong (...) để truy vấn luôn trông đến cùng
Tại sao bạn muốn các điểm trên? Nó là để trình tối ưu hóa truy vấn có thể sử dụng lại kế hoạch truy vấn.
tối ưu hóa khác:
- thay vì sử dụng -1, bạn chỉ có thể sử dụng giá trị đích thực cuối cùng một lần nữa. Điều đó thậm chí còn tốt hơn một chút.
Ví dụ: trong (1, 2, 3, 4, 4, ..., 4)
Cũng lưu ý: chúng tôi thử nghiệm với số lượng cố định khác nhau của các yếu tố trong định tại khoản và quan sát giảm biểu diễn cho nhiều hơn 100 yếu tố.
PS: nếu câu lệnh sql trả về giá trị trong mệnh đề IN được biết, bạn cũng có thể cân nhắc thay thế IN của mình bằng câu lệnh EXISTS. –
- 1. mysql chọn nơi giới hạn, tham gia, nơi
- 2. Bộ ký tự JDBC Oracle và giới hạn 4000 char
- 3. API Google Maps V3: giới hạn bản đồ giới hạn
- 4. chỉ đặt giới hạn dưới của giới hạn cho ggplot
- 5. Tại sao tên bảng/cột/chỉ mục của Oracle bị giới hạn trong 30 ký tự?
- 6. nhận giới hạn hiện tại?
- 7. SQL IN Khoản 1000 mục giới hạn
- 8. Giới hạn biến HTTPSession
- 9. Mã QR Giới hạn
- 10. Giới hạn gửi Gmail
- 11. Set giới hạn array_agg()
- 12. Đèn OpenGL giới hạn
- 13. mongodb $ trong giới hạn
- 14. Giới hạn hạn ngạch Google Xu hướng
- 15. Đặt giới hạn hết hạn để readLine()?
- 16. Làm cách nào để lưu trữ các ký tự không giới hạn trong Oracle 11g?
- 17. Chỉ chấp nhận các ký tự bị giới hạn khi sử dụng chấp nhận trong oracle
- 18. ImageView Pinch-zoom Quy mô giới hạn và giới hạn pan
- 19. Điều hoà/giới hạn tốc độ ruby cơ giới hóa
- 20. Giới hạn phần tử enum
- 21. Giới hạn chiều rộng bảng
- 22. PHP: json giới hạn decode
- 23. Giới hạn LocalStorage trên PhoneGap
- 24. Tài Giới hạn hành động
- 25. Giới hạn bộ nhớ PHP
- 26. Giới hạn kích thước mảng
- 27. Giới hạn kích thước Intent.putExtras?
- 28. Giới hạn bộ nhớ JavaScript
- 29. Giới hạn API Google Maps
- 30. Giới hạn giá trị F #
Một cách khác là dán 1000 giá trị vào bảng tạm thời toàn cầu trong cơ sở dữ liệu và tham gia hai bảng. Cơ sở dữ liệu rất tốt khi tham gia bảng :) –
Chính xác để cơ sở dữ liệu thực hiện công việc! Việc chia tách là một công việc được biết xung quanh, nhưng một công cụ nên chỉ ra rằng bạn cần phải suy nghĩ lại cách tiếp cận của bạn. –
Một cách khác là thực hiện HOẶC trên 1000 nhóm IN phần tử. Bằng cách này bạn có thể "ORDER BY" trên quiry. – hidralisk