Domanda

Situazione:

  • La tabella TBL ha ~ 10k voci per l'eliminazione,
  • La tabella TBL ha 14 tabelle figlio con la regola di eliminazione " nessuna azione " ;,
  • Voglio eliminare 10k voci e voci referenziate in tabelle figlio.

Procedura:

  • Elimina i record nelle tabelle figlio,
  • Disabilita i vincoli (se i vincoli non sono disabilitati, l'eliminazione nel passaggio successivo richiede un'eternità),
  • Elimina i record nella tabella TBL,
  • Abilita vincoli.

Esiste un modo più elegante per farlo?

Il problema è che il terzo passaggio richiede troppo tempo perché sta controllando l'esistenza di record inesistenti in 14 grandi tabelle. La mia procedura ha un buon tempo di esecuzione ma penso che ci sia un modo più elegante.

È stato utile?

Soluzione

Sembra che tu abbia bisogno di indicizzare le tue chiavi esterne sulle tue tabelle figlio. Ogni volta che si elimina un record padre senza un indice nella tabella figlio, è necessario eseguire una scansione completa della tabella figlio per verificare se il vincolo della chiave esterna è stato rotto.

Con l'indice, nel peggiore dei casi è una scansione dell'intervallo di indice.

Modifica : Maggiori informazioni e uno script per determinare se questo è il tuo problema sono disponibili qui. http://asktom.oracle.com/tkyte/unindex/index.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top