Oracle
 sql >> Database >  >> RDS >> Oracle

Ottimizzazione di una query Oracle

Primo, non c'è bisogno di distinct . La query può essere scritta come:

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

In secondo luogo, ci sono (almeno) altri due modi per scriverlo. O con 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

o (mia preferenza) con 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

In ogni caso, dovresti controllare tutti i piani di esecuzione.

Mi aspetto che le prestazioni siano migliori se hai un indice su table1.column1 e per table2 , o un indice su column2 o un indice composito su (column3, column2)