Oracle
 sql >> Base de données >  >> RDS >> Oracle

Optimisation d'une requête oracle

Tout d'abord, pas besoin de distinct . La requête peut être écrite comme :

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

Deuxièmement, il y a (au moins) deux autres façons de l'écrire. Soit avec 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

ou (ma préférence) avec 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

Dans tous les cas, vous devez vérifier les plans d'exécution pour chacun d'eux.

Je m'attendrais à ce que les performances soient meilleures si vous avez un index sur table1.column1 et pour table2 , soit un index sur column2 ou un index composite sur (column3, column2)