sql >> Base de Datos >  >> RDS >> Oracle

¿Oracle utiliza la evaluación de cortocircuito?

Depende... En general, Oracle no garantiza que una instrucción SQL utilice una evaluación de cortocircuito (aunque se garantiza que PL/SQL realizará una evaluación de cortocircuito). El optimizador de Oracle es libre de evaluar los predicados en el orden que considere más eficiente. Eso podría significar que el primer predicado se evalúa primero y solo las filas coincidentes tienen el segundo predicado evaluado, pero es muy posible que suceda lo contrario o que Oracle transforme la consulta en una especie de UNION y evalúa completamente ambos predicados antes de combinar los resultados.

Dicho esto, si el optimizador puede determinar en tiempo de compilación que un predicado siempre se evaluará como TRUE o FALSE , el optimizador debería tratarlo como una constante. Entonces, si, por ejemplo, hay una restricción en la tabla que impide que X de tener un valor de 'verdadero', el optimizador no debería evaluar el segundo predicado en absoluto (aunque las diferentes versiones del optimizador tendrán diferentes capacidades para detectar que algo es una constante en tiempo de compilación).

En cuanto a la segunda parte de su pregunta, sin ver los planes de consulta, es muy difícil saberlo. El optimizador de Oracle tiende a ser bastante bueno para transformar consultas de un formulario a otro si hay formas más eficientes de evaluarlo. En general, sin embargo, si subQ va a devolver una cantidad relativamente grande de filas en comparación con table , puede ser más eficiente estructurar la consulta como EXISTS en lugar de como un IN .