Oracle
 sql >> Database >  >> RDS >> Oracle

oracle - stessa query ma piano diverso in 11g e 12c

Il piano di esecuzione scelto dall'ottimizzatore scelto può variare notevolmente anche tra due ambienti della stessa versione, non solo 11g e 12c. Dipende da molti fattori, ma principalmente:

  • Numero di righe nella tabella (sono simili tra gli ambienti?)
  • Quali indici sono presenti (entrambi i db hanno gli stessi identici indici?)
  • Ci sono statistiche per la tabella e gli indici e quanto sono aggiornate? Se non è aggiornato, raccogli le statistiche per le tabelle e gli indici.

Se puoi pubblicare questi dettagli, posso fornire una risposta più utile.

Inoltre, il codice sembra generato automaticamente, se sei libero di modificarlo, in base ai dettagli, possiamo suggerire una query riscritta e/o suggerimenti.

Se non riesci a modificare il codice, puoi forzare un piano con SQL Plan Management (SPM):esporta dal db dove viene eseguito più velocemente e importa nell'altro db.

AGGIORNAMENTO

Usa questa versione semplificata dell'SQL per generare il piano:

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