2012-02-13 9 views
19

Attualmente sto sviluppando su Oracle. Ho diverse tabelle per le quali ho definito i vincoli FOREIGN KEY. Ho già letto questa domanda con orientamento SQL Server e questa MySQL ma non ho trovato nulla su Oracle.Oracle crea automaticamente un indice secondario per le colonne FOREIGN KEY?

Quindi la domanda è sempre la stessa: per ottimizzare le prestazioni della query, per quelle colonne per le quali creo un vincolo FOREIGN KEY, devo anche creare un indice secondario esplicito? Oracle non crea automaticamente un indice sulle colonne FOREIGN KEYed per migliorare le prestazioni durante le JOIN?

Di solito eseguo query in cui la clausola WHERE si confronta con quelle colonne.

+1

No, non è così. Vedere [questo] (http://stackoverflow.com/questions/4127206/do-i-need-to-create-indexes-on-foreign-keys), ad esempio. –

risposta

18

No, Oracle non crea automaticamente indici su colonne di chiavi esterne, anche se nel 99% dei casi è probabilmente necessario. Oltre ad aiutare con le query, l'indice migliora anche le prestazioni delle istruzioni di eliminazione sulla tabella padre.

+1

Tali indici hanno un costo da mantenere, tuttavia, e ci sono momenti in cui è meglio non crearli. Personalmente ho il sospetto che dovrebbe crearli di default e lasciarli cadere se vuoi, ma Oracle è lontano dall'unico DB a comportarsi come fa. PostgreSQL non crea automaticamente indici per il lato di riferimento di una relazione di chiave esterna. –

Problemi correlati