sql >> Database >  >> RDS >> Oracle

Optimalisatie van een orakel-query

Ten eerste, geen behoefte aan distinct . De vraag kan worden geschreven als:

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

Ten tweede zijn er (ten minste) nog twee manieren om het te schrijven. Ofwel met 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

of (mijn voorkeur) met 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 ieder geval moet u de uitvoeringsplannen voor al deze plannen controleren.

Ik zou verwachten dat de prestaties het beste zijn als je een index hebt op table1.column1 en voor table2 , ofwel een index op column2 of een samengestelde index op (column3, column2)



  1. Importeer 'xml' in SQL Server

  2. Precisie van interval voor PL/SQL-functiewaarde

  3. Spring Boot data-jpa en nativeQuery Postgres cast

  4. Maak een functie met optionele argumenten in MySQL