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

Optimering af en orakelforespørgsel

For det første er der ikke behov for distinct . Forespørgslen kan skrives som:

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

For det andet er der (mindst) to måder mere at skrive det på. Enten med 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

eller (min præference) med 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

Under alle omstændigheder bør du tjekke udførelsesplanerne for dem alle.

Jeg forventer, at ydeevnen er bedst, hvis du har et indeks på table1.column1 og for table2 , enten et indeks på column2 eller et sammensat indeks på (column3, column2)



  1. Brug af MySQL 5, Simple Membership Provider, ASP.NET MVC4 med Entity Framework 5

  2. Fejlfinding:MySQL/MariaDB-fejl #1044 Е Adgang nægtet for bruger

  3. MySQL crasher på SQL

  4. Opret forbindelse til ekstern MySQL-database via SSH ved hjælp af Java