Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Optymalizacja zapytania wyroczni

Po pierwsze, nie ma potrzeby stosowania distinct . Zapytanie można zapisać jako:

select * 
  from example@sqldat.com 
 where column1 in (
          select column2 
            from example@sqldat.com 
           where column3 > 0
                  ) 
order by column1

Po drugie, są jeszcze (co najmniej) dwa sposoby na napisanie tego. Albo z JOIN :

select t1.* 
  from example@sqldat.com t1
  join example@sqldat.com t2
 where t2.column2 = t1.column1
   and t2.column3 > 0 
group by
       t1.id, t1.column1, ... 

order by t1.column1

lub (moje preferencje) z EXISTS :

select t1.* 
  from example@sqldat.com t1 
 where exists
       ( select *
           from example@sqldat.com 
          where t2.column2 = t1.column1
            and t2.column3 > 0
                  ) 
order by column1

W każdym razie powinieneś sprawdzić plany wykonania dla nich wszystkich.

Spodziewam się, że wydajność będzie najlepsza, jeśli masz indeks na table1.column1 i dla table2 , albo indeks w column2 lub indeks złożony na (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. Tworzysz program obsługi rejestrowania do łączenia się z Oracle?

  2. Wybierz dane pogrupowane według czasu po północy

  3. Wstawianie daty z java do Oracle DB

  4. Jak uzyskać ostatni dzień miesiąca od podanej daty?

  5. Jak i kiedy są używane indeksy w operacjach INSERT i UPDATE?