Oracle Kaskadierung löschen

8

Ist Kaskadenlöschung in einer Tabelle effizienter als einzelne Löschanweisungen (die in einem einzigen plsql-Block ausgeführt werden)?

    
Rnet 20.12.2011, 06:43
quelle

3 Antworten

17

Was cascade delete tut, gibt einzelne delete-Anweisungen aus.

Untersuchen Sie den folgenden Testfall:

%Vor%

In der Trace-Datei finden Sie eine Zeile wie folgt:

%Vor%

Das ist Oracle, das eine Löschanweisung für CHILD für jeden Datensatz ausgibt, den es in PARENT löscht.

Eine andere Frage wäre, welche der beiden effizienter sind:

%Vor%

vs

%Vor%

beide mit on delete cascade aktiviert. Überraschenderweise wird Oracle im ersten Fall den Fremdschlüsselindex für die untergeordnete Tabelle untersuchen, um festzustellen, ob Zeilen vorhanden sind, die eine Kaskade erfordern. Wenn keine Zeilen vorhanden sind, führt Oracle das kaskadierte Löschen nicht aus.

    
Adam Musch 20.12.2011, 15:36
quelle
5

Sie können beide Optionen nicht vergleichen. Es ist kein Leistungsproblem, sondern mehr Design und Struktur.

Wenn Sie Ihre Datenbank mit primären / fremden Schlüsseln entwerfen, ist es einfacher, mit cascading-deltes zu löschen, als manuell zu suchen, wo Sie Fremdschlüssel in welcher Spalte und Tabelle haben und maching SQL-Anweisungen erzeugen.

Der Hauptvorteil der Cascading-Deletes-Funktion besteht darin, dass Sie die Anzahl der SQL-Anweisungen reduzieren können, die Sie zum Ausführen von Löschaktionen benötigen

    
CloudyMarble 20.12.2011 06:48
quelle
0

Wenn Sie eine Kaskade löschen möchten und keinen Fremdschlüssel definiert haben, können Sie etwas wie folgt verwenden:

%Vor%     
Benoit 20.12.2011 10:24
quelle

Tags und Links