Ver Mensaje Individual
  #9 (permalink)  
Antiguo 22/06/2012, 17:18
Avatar de matanga
matanga
 
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: Qué hace un "+ 0 ="

La condición campo +0 = valor solo tiene impacto en el uso de índices, y era útil cuando se quería forzar un fullscan con el optimizador basado en Regla (RBO), es decir:

1. El hint FULL evita el índice, pero cualquier hint (excepto RULE) provoca que el optimizador resuelva la consulta con CBO.

Código:
create table tabla1 (campo1 number);
create index ind1 on tabla1(campo1);
select /*+ full(tabla1) */ campo1 
 from tabla1 where campo1=valor;
2. El hint RULE (también está el parámetro OPTIMIZER_MODE=RULE) provoca que el optimizador resuelva las consultas con RBO, y en este caso, la única forma de evitar el índice es aplicando una función nula al campo.

Código:
create table tabla1 (campo1 number);
create index ind1 on tabla1(campo1);
select /*+ rule */ campo1 
 from tabla1 where campo1 +0 =valor;
En cualquier caso, esto ya no tiene mucho uso, el modo RBO está completamente deprecado, y el modo CBO ha evolucionado tanto en las últimas versiones que rara vez se necesita forzar su comportamiento con hints.

Saludos