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

Tối ưu hóa truy vấn tiên tri

Đầu tiên, không cần distinct . Truy vấn có thể được viết là:

select * 
  from [email protected] 
 where column1 in (
          select column2 
            from [email protected] 
           where column3 > 0
                  ) 
order by column1

Thứ hai, có (ít nhất) hai cách nữa để viết nó. Hoặc với JOIN :

select t1.* 
  from [email protected] t1
  join [email protected] t2
 where t2.column2 = t1.column1
   and t2.column3 > 0 
group by
       t1.id, t1.column1, ... 

order by t1.column1

hoặc (tùy chọn của tôi) với EXISTS :

select t1.* 
  from [email protected] t1 
 where exists
       ( select *
           from [email protected] 
          where t2.column2 = t1.column1
            and t2.column3 > 0
                  ) 
order by column1

Trong mọi trường hợp, bạn nên kiểm tra các kế hoạch thực hiện cho tất cả chúng.

Tôi mong đợi hiệu suất sẽ tốt nhất nếu bạn có chỉ mục trên table1.column1 và cho table2 , hoặc là một chỉ mục trên column2 hoặc chỉ mục tổng hợp trên (column3, column2)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự cố kết nối vb.net oracle không liên tục

  2. Oracle SQL tạo ngày từ các bộ phận

  3. Cách tiếp tục xử lý vòng lặp con trỏ sau ngoại lệ trong Oracle

  4. Không thể truy xuất id của hàng được chèn cuối cùng trong Hibernate bằng Oracle

  5. Làm thế nào để chèn tập hợp kết quả được trả về bởi một thủ tục được lưu trữ oracle vào một bảng khác bằng cách sử dụng thủ tục được lưu trữ thứ hai?