sql >> Databáze >  >> RDS >> Oracle

Optimalizace dotazu Oracle

Za prvé, není třeba distinct . Dotaz lze napsat jako:

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

Za druhé, existují (alespoň) další dva způsoby, jak to napsat. Buď pomocí 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

nebo (moje preference) s 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

V každém případě byste měli zkontrolovat prováděcí plány pro všechny z nich.

Očekával bych, že výkon bude nejlepší, pokud budete mít index na table1.column1 a pro table2 , buď index na column2 nebo složený index na (column3, column2)



  1. Nastavit časové pásmo pro MYSQL NOW()

  2. Převeďte datový typ časového razítka do unixového časového razítka Oracle

  3. MySQL select se zdá být velmi pomalý, ale nenapadá vás, jak to zlepšit?

  4. Jak nainstalovat MySQL na CentOS 7