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

Oracle използва ли оценка на късо съединение?

Зависи.. Като цяло Oracle не гарантира, че SQL израз ще използва оценка на късо съединение (въпреки че PL/SQL гарантирано извършва оценка на късо съединение). Оптимизаторът на Oracle е свободен да оценява предикатите в какъвто и ред да очаква да бъде най-ефективен. Това може да означава, че първият предикат се оценява първи и само съответстващите редове имат втория предикат, но е напълно възможно да се случи или обратното, или Oracle да трансформира заявката в нещо като UNION и напълно оценява и двата предиката, преди да комбинира резултатите.

Като се има предвид това, ако оптимизаторът може да определи по време на компилиране, че предикат винаги ще се оценява на TRUE или FALSE , оптимизаторът трябва просто да третира това като константа. Така че, ако например има ограничение върху таблицата, което предотвратява X след като някога има стойност „true“, оптимизаторът изобщо не трябва да оценява втория предикат (въпреки че различните версии на оптимизатора ще имат различни способности да откриват, че нещо е константа по време на компилиране).

Що се отнася до втората част на въпроса ви, без да виждате плановете на заявката, е много трудно да се каже. Оптимизаторът на Oracle е доста добър в трансформирането на заявки от една форма в друга, ако има по-ефективни начини за оценката му. Като цяло обаче, ако subQ ще върне относително голям брой редове в сравнение с table , може да е по-ефективно да структурирате заявката като EXISTS вместо като IN .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sqlplus изявление от командния ред

  2. Може ли някой да обясни какво наистина прави изявлението MERGE в Oracle?

  3. Как можете да разберете дали се използва PL/SQL пакет, процедура или функция?

  4. Как да намерите таблица, където статистиката е заключена

  5. Преименувайте Oracle Table или View