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

Oracle:misma consulta pero plan diferente en 11g y 12c

El plan de ejecución elegido por el optimizador elegido puede variar mucho incluso entre dos entornos de la misma versión, no solo 11g y 12c. Depende de muchos factores, pero principalmente:

  • Número de filas en la tabla (¿son similares entre envs?)
  • ¿Qué índices están presentes (¿ambas bases de datos tienen exactamente los mismos índices?)
  • ¿Hay estadísticas para la tabla y los índices, y qué tan actualizadas están? Si no está actualizado, recopile las estadísticas de las tablas y los índices.

Si puede publicar estos detalles, puedo proporcionarle una respuesta más útil.

Además, el código parece generado automáticamente, si tiene la libertad de modificarlo, según los detalles, podemos sugerir una consulta reescrita y/o sugerencias.

Si no puede modificar el código, puede forzar un plan con SQL Plan Management (SPM):exportar desde la base de datos donde se ejecuta más rápido e importar a la otra base de datos.

ACTUALIZAR

Utilice esta versión simplificada del SQL para generar el plan:

SELECT * FROM DMProgDate_00001
 WHERE ProgressOID IN ( 
   SELECT OID FROM DMProgress_00001 
    WHERE Project = 'Moho'
      AND Phase = 'Procurement'
      AND Displine = 'Q340'
      AND ROWNUM <= 20
    ORDER BY actCode
  );