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

Анти-съединяването по-ефективно ли е от лявото външно съединение?

Когато използвате „не съществува“ или „не е в“ във вашата SQL заявка, вие позволявате на Oracle да избере пътища за достъп против сливане или хеширане на анти-свързване.

Бързо обяснение

Например, дадено съединение между таблица A и B (от A join B към A.x =B.x) Oracle ще извлече всички съответни данни от таблица A и ще се опита да ги съпостави със съответните редове в таблица B, така че е строго зависимо от селективността на таблицата Предикат.

Когато използва оптимизация против присъединяване, Oracle може да избере таблицата с по-висока селективност и да я съпостави с другата, което може да доведе до много по-бърз код.

Не може да направи това с редовно свързване или подзаявка, защото не може да приеме, че едно съвпадение между таблици A и B е достатъчно, за да върне този ред.

Свързани съвети: HASH_AJ, MERGE_AJ.

Още:

Това изглежда хубава и подробна статия по темата.

Тук е друга, по-прилична статия.



  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

  2. Как да използвате Oracle PLSQL таблици (асоциативен масив или таблица по индекс)

  3. Вземете последния идентификатор на вмъкнатия ред в Oracle DB

  4. TEMPFILE Офлайн физическа готовност

  5. Липсващи редове при заявка към таблица с Doctrine (Symfony2)