Oracle
 sql >> Base de données >  >> RDS >> Oracle

oracle - même requête mais plan différent en 11g et 12c

Le plan d'exécution choisi par l'optimiseur choisi peut varier considérablement même entre deux environnements de la même version, pas seulement 11g et 12c. Cela dépend de nombreux facteurs, mais principalement :

  • Nombre de lignes dans le tableau (sont-elles similaires entre les env ?)
  • Quels index sont présents (les deux bases de données ont-elles exactement les mêmes index ?)
  • Existe-t-il des statistiques pour le tableau et les index, et sont-ils à jour ? Si ce n'est pas à jour, veuillez rassembler des statistiques pour les tableaux et les index.

Si vous pouvez publier ces détails, je peux fournir une réponse plus utile.

De plus, le code semble généré automatiquement, si vous êtes libre de le modifier, en fonction des détails, nous pouvons suggérer une requête réécrite et/ou des conseils.

Si vous ne pouvez pas modifier le code, vous pouvez forcer un plan avec SQL Plan Management (SPM) - exporter depuis la base de données où il s'exécute plus rapidement et importer dans l'autre base de données.

MISE À JOUR

Utilisez cette version simplifiée du SQL pour générer le 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
  );