Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

A Oracle usa avaliação de curto-circuito?


Depende. Em geral, a Oracle não garante que uma instrução SQL usará avaliação de curto-circuito (embora o PL/SQL tenha a garantia de realizar a avaliação de curto-circuito). O otimizador Oracle é livre para avaliar os predicados na ordem que achar mais eficiente. Isso pode significar que o primeiro predicado é avaliado primeiro e apenas as linhas correspondentes têm o segundo predicado avaliado, mas é perfeitamente possível que o inverso aconteça ou que o Oracle transforme a consulta em uma espécie de UNION e avalia totalmente ambos os predicados antes de combinar os resultados.

Dito isto, se o otimizador puder determinar em tempo de compilação que um predicado sempre será avaliado como TRUE ou FALSE , o otimizador deve tratar isso apenas como uma constante. Portanto, se, por exemplo, houver uma restrição na tabela que impeça X de nunca ter um valor de 'true', o otimizador não deve avaliar o segundo predicado (embora versões diferentes do otimizador tenham diferentes habilidades para detectar que algo é uma constante em tempo de compilação).

Quanto à segunda parte da sua pergunta, sem ver os planos de consulta, é muito difícil dizer. O otimizador Oracle tende a ser muito bom em transformar consultas de um formulário para outro se houver maneiras mais eficientes de avaliá-lo. Em geral, no entanto, se subQ vai retornar um número relativamente grande de linhas em comparação com table , pode ser mais eficiente estruturar a consulta como um EXISTS em vez de um IN .