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

Điều chỉnh hiệu suất câu lệnh DECODE () trong mệnh đề WHERE

Tôi khuyên bạn nên viết mã dưới dạng:

SELECT SUM(dd.amt)
FROM db JOIN
     dd
     ON db.id = dd.dsba_id
WHERE dd.nd_id = xxxxxxx AND
      dd.a_id = 'xxxxx-xx' AND
      (db.v_id = xxxxxxxxx OR db.code = 'COMPLETE') AND
      db.datet >= trunc(sysdate, 'YEAR');

Đối với truy vấn này, tôi muốn giới thiệu các chỉ mục trên:

  • db(nd_id, a_id, id, datet, code)
  • dd(dsba_id, datet, v_id)

Các thay đổi đối với truy vấn trên:

  • Không bao giờ sử dụng dấu phẩy trong FROM mệnh đề. Luôn sử dụng đúng, rõ ràng, tiêu chuẩn , có thể đọc được JOIN cú pháp. (Tuy nhiên, điều này không ảnh hưởng đến hiệu suất.)
  • decode() khá khó để theo dõi. Một boolean đơn giản or tương đương.
  • BETWEEN là không cần thiết giả định rằng datet không có trong tương lai.
  • SUM(NVL()) không cần thiết, vì NULL các giá trị bị bỏ qua. Nếu bạn lo lắng về NULL kết quả, tôi sẽ đề xuất COALESCE(SUM(dd.amt), 0)



  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ỗi ORA-00604 khi chèn hàng loạt bên trong TransactionScope

  2. cách đặt lưu lượng phục vụ khi sử dụng kết nối jdbc trong Jmeter

  3. Bất cứ ai có thể giải thích truy vấn này?

  4. Không thể tạo Nguồn dữ liệu Eclipse cho Oracle 12c bằng cách sử dụng jar 12c. Tuy nhiên 11g hoạt động

  5. Thực hiện chọn ngay lập tức không trả về giá trị nào