Articles

SQL WORLD

In meinem vorherigen Artikel habe ich die Idee gegeben, wie die Datensätze in SQL aktualisiert werden. In diesem Artikel möchte ich anhand mehrerer Beispiele eine detaillierte Vorstellung davon geben, wie der Großteil der Datensätze in der Oracle-Datenbank aktualisiert werden kann.Ich möchte die Beispiele für die Aktualisierung der meisten Datensätze in Oracle geben, eine Tabelle mit dem Namen Customer und eine andere Tabelle mit dem Namen Company.

Welche verschiedenen Möglichkeiten gibt es, den Großteil der Datensätze in der Oracle-Datenbank zu aktualisieren?

Es gibt verschiedene Methoden, mit denen wir den Großteil der Datensätze in der Oracle-Datenbank aktualisieren. Ich möchte die folgenden Möglichkeiten im Detail mit realen Industriebeispielen diskutieren. Diese Beispiele geben Ihnen eine klare Vorstellung vom Aktualisierungsprozess von Oracle im Detail.

Annahmen:

Wir gehen davon aus, dass es zwei Tabellen gibt – Kundeninformationen – Das ist der Name des Kunden, der die angegebene E-Commerce-Website besucht. Es gibt Millionen von Datensätzen in der Kundentabelle, aber wir gehen davon aus, dass es 999999 Datensätze in der Kundentabelle gibt. Es gibt eine andere Tabelle namens Customer_Entry, die ebenfalls 777777 Datensätze enthält. Der Primärschlüssel mit dem Namen Customer_ID befindet sich in beiden Tabellen.

Arten von Updates :

1.Update mit For-Schleife

2.Traditionelles Update (Datensätze einzeln aktualisieren)

3.Bulk Update mit BULK COLLECT und FÜR ALLE Anweisung

4.DIREKTE AKTUALISIERUNG SQL

5.MERGE-Anweisung, um den Datensatz schnell zu aktualisieren

6.Aktualisieren Sie mit der INLINE-Ansichtsmethode.

Wir müssen alle Methoden ausführen und die e-Performance der verschiedenen Update-Anweisungen überprüfen.

Szenario 1 : Traditioneller Weg, um einzelne Datensätze zu aktualisieren und nach der for-Schleife zu committen

begin
for cusrsor_1 in (select * from customer)
loop
update customer_entry
set
customer_no = cursor_1 .customer_no, customer_name=cursor_1.customer_name, customer_product=c.customer_product where
customer_id= c.customer_id;
end loop; commit;
end;
/

PL/SQL-Prozedur erfolgreich abgeschlossen.

Verstrichen: 00:02:42.36

Wenn Sie das erste Beispiel überprüfen können, in dem wir versuchen, alle Datensätze mithilfe der for-Schleife zu aktualisieren und dann die commit-Anweisung zu verwenden. Wenn Sie den spezifischen PL SQL-Block ausführen können. Es dauert ungefähr 2 Minuten und 42 Sekunden, um den Vorgang abzuschließen und die Datensätze zu aktualisieren.

Szenario 2 : Traditionelle Methode zum Aktualisieren einzelner Datensätze und Commit innerhalb der for-Schleife

begin
for cusrsor_1 in (select * from customer)
loop
update customer_entry
set
customer_no = cursor_1.customer_no, customer_name=cursor_1.customer_name, customer_product=c.customer_product where
customer_id= c.customer_id;
commit;
Endschleife;
Ende;
/

PL / SQL-Prozedur erfolgreich abgeschlossen.

Elapsed: 00:03:58.39

Wenn wir den Prozess und das Timing überprüfen können, um die Datensätze auszuführen oder die Datensätze in der Datenbank zu aktualisieren, sind es ungefähr 3 Minuten und 58 Sekunden. Hier wird die Commit-Anweisung nach jeder Aktualisierung des Datensatzes ausgeführt, sodass die Zeit zum Aktualisieren des Datensatzes höher ist als bei einem einzelnen Commit-Datensatz.

Szenario 3: BULK-UPDATE mit BULK COLLECT und FÜR ALLE

deklarieren

typ customer_t ist Tabelle des Kunden%rowtype index von

pls_integer; l_customer_data customer_t;

begin Select *

bulk collect into l_customer_data from Customer;

forall rec in 1 .. l_customer_data.count

Aktualisieren Sie customer_entry e set e.customer_no= l_customer_data(rec).e.customer_name= l_employee_data(rec).kunden_name,

e.customer_product= l_employee_data(rec).customer_product

wobei r.customer_id= l_employee_data(rec).customer_id;

commit;

end;

PL/SQL-Prozedur erfolgreich abgeschlossen.

Elapsed: 00:00:53.55

Die Massensammelmethode ist eine schnellere Methode als herkömmliche Methoden. Wir müssen eine Typvariable erstellen, in der wir alle Kundendaten abrufen können, und wir müssen die bulk collect-Anweisung in der forall-Klausel verwenden, damit die Datensätze in der forall-Klausel oder der angegebenen Tabelle korrekt aktualisiert werden. Wenn wir die verstrichene Zeit sehen können, sind es ungefähr 54 Sekunden, was schneller ist als bei anderen Methoden.

4. DIREKTE AKTUALISIERUNG SQL

begin

update customer_entry ent

set (customer_no, customer_name, customer_product) =

( Wählen Sie customer_no, customer_name, customer_product aus customer c wobei c.customer_id= ent.customer_id )

where c.customer_id in (select customer_id from customer);

commit;

end;

PL/SQL-Prozedur erfolgreich abgeschlossen.

Verstrichen: 00:00:58.22

Das direkte Update dauert 58 Sekunden, um alle Datensätze zu aktualisieren. wenn wir das mit Bulk Collect vergleichen können, dauerte es 3-4 Sekunden extra, um alle Datensätze zu aktualisieren

Szenario 5: MERGE–ANWEISUNG – Schnellste Möglichkeit, den Großteil der Datensätze zu aktualisieren

begin

mit

customer c

on (er.customer_id= c.customer_id)

wenn abgestimmt dann

update set er.kundennummer = c.kundennummer,

er.cutomer_name= c.Kundenname,

er.customer_product= c.customer_product;

commit;

end;

PL/SQL-Prozedur erfolgreich abgeschlossen.

Elapsed: 00:00:36.23

Der schnellste Weg, den Großteil der Datensätze zu aktualisieren, ist die Merge-Anweisung. Die Merge-Anweisung benötigte 36 Sekunden, um Datensätze schnell zu aktualisieren.

Szenario 6:AKTUALISIERUNG mithilfe der INLINE-Ansichtsmethode

begin

update

(

select r.customer_id, r.customer_number, r.customer_name, r.customer_product,

e.customer_number cnum, e.customer_name cname, e.customer_product cprod

von customer_entry r, Kunde e

wobei r.customer_id= e.customer_id

) 9

setze customer_number = cnum

customer_name= cname,

customer_product= cprod;

commit;

end;

PL/SQL-Prozedur erfolgreich abgeschlossen.

Elapsed: 00:00:37.97

Bei Verwendung der Inline-View-Methode wird die Massenaktualisierung ungefähr in 38 Sekunden abgeschlossen, was auch der schnelle Weg wie die Merge-Anweisung ist.

Was lernen wir?

Das Denken jedes SQL- oder PLSQL-Entwicklers ist BULK COLLECT und FOR ALL statement ist besser für Bulk-Operationen. Wenn wir die Details in den obigen 6 Abfragen beobachten können, würde die Update SQL-Anweisung die bessere Leistung als Bulk Collect und für alle liefern. Versuchen Sie also, SQL-Code in der PL / SQL-API zu verwenden, um ein schnelles Update durchzuführen. Aber es wird Szenario zu Szenario variieren, so dass Sie immer die Szenarien überprüfen können. Wenn Sie die schnellste Leistung wünschen, versuchen Sie, eine Merge-Anweisung oder eine Inline-Ansicht zu schreiben.