Solo per maggiori informazioni: Oracle non crea un indice automaticamente (come avviene per i vincoli univoci) perché (a) non è richiesto per forzare il vincolo e (b) in alcuni casi non è necessario uno.
maggior parte del tempo, però, si vuole creare un indice (in realtà, in Oracle Apex c'è un rapporto di "chiavi esterne non indicizzati").
Ogni volta che l'applicazione deve essere in grado di eliminare una riga nella tabella padre o aggiornare il valore PK (che è più raro), il DML ne risentirà se non esiste alcun indice, poiché dovrà bloccare l'intera tabella figlio .
Un caso in cui di solito scelgo non per aggiungere un indice è dove l'FK è una tabella "dati statici" che definisce il dominio di una colonna (ad esempio una tabella di codici di stato), dove gli aggiornamenti e le eliminazioni su la tabella genitore non viene mai eseguita direttamente dall'applicazione. Tuttavia, se l'aggiunta di un indice sulla colonna offre vantaggi a query importanti nell'applicazione, l'indice sarà comunque una buona idea.
fonte
2010-11-09 00:31:06
Su alcune basi di dati, creando un vincolo di chiave esterna crea anche un indice ... ie Jet Engine (file MSAccess, Firebird e MySQL) – bubi
Questa risposta non ha senso senza riferimento esplicito a una particolare implementazione del database. Certo, la domanda è contrassegnata da 'oracle' ma ciò non è immediatamente ovvio quando si atterra qui da una ricerca su google. – developerbmw
Posso confermare che PostgreSQL - almeno al momento di questo post - non lo fa automaticamente. –