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

Oracle có sử dụng đánh giá ngắn mạch không?

Nó phụ thuộc. Nói chung, Oracle không đảm bảo rằng một câu lệnh SQL sẽ sử dụng đánh giá ngắn mạch (mặc dù PL / SQL được đảm bảo để thực hiện đánh giá ngắn mạch). Trình tối ưu hóa Oracle miễn phí đánh giá các vị từ theo bất kỳ thứ tự nào mà nó mong đợi là hiệu quả nhất. Điều đó có thể có nghĩa là vị từ đầu tiên được đánh giá đầu tiên và chỉ những hàng phù hợp mới có vị từ thứ hai được đánh giá nhưng hoàn toàn có thể xảy ra điều ngược lại hoặc Oracle chuyển đổi truy vấn thành một loại UNION và đánh giá đầy đủ cả hai vị từ trước khi kết hợp các kết quả.

Điều đó đang được nói, nếu trình tối ưu hóa có thể xác định tại thời điểm biên dịch rằng một vị từ sẽ luôn đánh giá thành TRUE hoặc FALSE , trình tối ưu hóa chỉ nên coi đó là một hằng số. Vì vậy, ví dụ:nếu có một ràng buộc trên bảng ngăn X từ khi có giá trị 'true', trình tối ưu hóa hoàn toàn không nên đánh giá vị từ thứ hai (mặc dù các phiên bản khác nhau của trình tối ưu hóa sẽ có các khả năng khác nhau để phát hiện rằng một cái gì đó là hằng số tại thời điểm biên dịch).

Đối với phần thứ hai của câu hỏi của bạn, nếu không nhìn thấy các kế hoạch truy vấn, thì rất khó để nói. Trình tối ưu hóa Oracle có xu hướng khá tốt trong việc chuyển đổi các truy vấn từ dạng này sang dạng khác nếu có nhiều cách đánh giá hiệu quả hơn. Nói chung, tuy nhiên, nếu subQ sẽ trả về một số lượng hàng tương đối lớn so với table , có thể hiệu quả hơn nếu cấu trúc truy vấn dưới dạng EXISTS chứ không phải là IN .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. EBS 12.2.5 trở lên:Sai lệch nút trang đăng nhập

  2. Oracle:Số ngày giữa hai ngày và Loại trừ các ngày trong tuần cách xử lý số âm

  3. ORA-01097

  4. Truy vấn EF tới Oracle ném ORA-12704:bộ ký tự không khớp

  5. Truyền mảng cho thủ tục Oracle từ c #