Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Orakel - gleiche Abfrage, aber unterschiedlicher Plan in 11g und 12c

Der vom ausgewählten Optimierer gewählte Ausführungsplan kann sogar zwischen zwei Umgebungen derselben Version, nicht nur zwischen 11g und 12c, stark variieren. Es hängt von vielen Faktoren ab, aber hauptsächlich:

  • Anzahl der Zeilen in der Tabelle (sind sie zwischen Envs ähnlich?)
  • Welche Indizes sind vorhanden (haben beide Datenbanken genau dieselben Indizes?)
  • Gibt es Statistiken für die Tabelle und die Indizes und wie aktuell sind diese? Falls nicht aktuell, sammeln Sie bitte Statistiken für die Tabellen und die Indizes.

Wenn Sie diese Details posten können, kann ich eine hilfreichere Antwort geben.

Außerdem sieht der Code wie automatisch generiert aus. Wenn Sie ihn ändern können, können wir basierend auf den Details eine umgeschriebene Abfrage und/oder Hinweise vorschlagen.

Wenn Sie den Code nicht ändern können, können Sie einen Plan mit SQL Plan Management (SPM) erzwingen – exportieren Sie aus der Datenbank, wo er schneller ausgeführt wird, und importieren Sie ihn in die andere Datenbank.

AKTUALISIEREN

Verwenden Sie diese vereinfachte Version von SQL, um den Plan zu generieren:

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
  );