Oracle
 sql >> база данни >  >> RDS >> Oracle

Оптимизиране на оракул заявка

Първо, няма нужда от distinct . Заявката може да бъде написана като:

select * 
  from example@sqldat.com 
 where column1 in (
          select column2 
            from example@sqldat.com 
           where column3 > 0
                  ) 
order by column1

Второ, има (поне) още два начина да го напишете. Или с JOIN :

select t1.* 
  from example@sqldat.com t1
  join example@sqldat.com t2
 where t2.column2 = t1.column1
   and t2.column3 > 0 
group by
       t1.id, t1.column1, ... 

order by t1.column1

или (мое предпочитание) с EXISTS :

select t1.* 
  from example@sqldat.com t1 
 where exists
       ( select *
           from example@sqldat.com 
          where t2.column2 = t1.column1
            and t2.column3 > 0
                  ) 
order by column1

Във всеки случай трябва да проверите плановете за изпълнение за всички тях.

Очаквам производителността да бъде най-добра, ако имате индекс на table1.column1 и за table2 , или индекс на column2 или съставен индекс на (column3, column2)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Database BLOB към InputStream в Java?

  2. Как работи contains() в PL-SQL?

  3. Условно дефинирайте курсор

  4. Oracle същото име на таблица на различна схема?

  5. PLS-00103 Открит символ> грешка при изпълнение на съхранена процедура