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

Optymalizacja zapytania wyroczni

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

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

Po drugie, są jeszcze (co najmniej) dwa sposoby na napisanie tego. Albo z 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

lub (moje preferencje) z 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

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?