sql >> Databasteknik >  >> RDS >> Oracle

Optimering av en orakelfråga

För det första behöver du inte distinct . Frågan kan skrivas som:

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

För det andra, det finns (minst) ytterligare två sätt att skriva det på. Antingen 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 preferens) 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

I vilket fall som helst bör du kontrollera genomförandeplanerna för dem alla.

Jag förväntar mig att prestanda blir bäst om du har ett index på table1.column1 och för table2 , antingen ett index på column2 eller ett sammansatt index på (column3, column2)



  1. Förhandsgranskningsfel för BI Publisher och Excel-mall

  2. Importera och infoga filen sql.gz i databasen med kitt

  3. ange maximalt värde för en kolumn

  4. Anslutning till MySQL orsakar fel Datakällans namn hittades inte och ingen standarddrivrutin specificerad