Articles

SQL WORLD

Nel mio precedente articolo ho dato l’idea di come aggiornare i record in sql. In questo articolo vorrei dare un’idea dettagliata del modo di aggiornare la maggior parte dei record nel database Oracle con più esempi.Vorrei fornire gli esempi di aggiornamento di massa di record in oracle one una tabella denominata Cliente e altra tabella denominata Società.

Quali sono i diversi modi per aggiornare la maggior parte dei record nel database oracle?

Esistono varie metodologie che stiamo utilizzando per aggiornare la maggior parte dei record nel database oracle. Vorrei discutere i seguenti modi in dettaglio con esempi di settore di vita reale. Questi esempi ti daranno un’idea chiara del processo di aggiornamento di oracle in dettaglio.

Ipotesi:

Stiamo assumendo che ci sono due tabelle – Informazioni sul cliente – Che è il nome del cliente che visita al sito web di E commerce specificato. Ci sono milioni di record nella tabella dei clienti, ma presumiamo che ci siano 999999 record nella tabella dei clienti. C’è un’altra tabella denominata Customer_Entry che ha anche 777777 record. La chiave primaria denominata Customer_ID si trova in entrambe le tabelle.

Tipi di aggiornamenti:

1.Aggiornamento utilizzando Per loop

2.Aggiornamento tradizionale (aggiornamento dei record singolarmente)

3.Aggiornamento Bulk utilizzando BULK COLLECT e PER TUTTI istruzione

4.AGGIORNAMENTO DIRETTO SQL

5.MERGE Istruzione per gli aggiornamenti record veloce

6.Aggiornamento utilizzando il metodo di visualizzazione IN LINEA.

Dobbiamo eseguire tutti i modi e dobbiamo controllare le prestazioni e delle diverse istruzioni di aggiornamento.

Scenario 1 : Modo tradizionale per aggiornare i singoli record e commit dopo for loop

begin
per 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 dove
customer_id= c.customer_id;
end loop; commit;
end;
/

PL/SQL procedura completata con successo.

Trascorso: 00: 02: 42.36

Se è possibile controllare il primo esempio in cui stiamo cercando di aggiornare tutti i record utilizzando for loop e quindi utilizzare l’istruzione commit. Se è possibile eseguire il blocco SQL PL specifico. Ci vogliono circa 2 minuti e 42 secondi per completare la procedura e aggiornare i record.

Scenario 2: Modo tradizionale per aggiornare i singoli record e commit all’interno di loop

begin
per 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 dove
customer_id= c.customer_id;
commit;
end loop;
end;
/

PL/SQL procedura completata con successo.

Trascorso: 00: 03: 58.39

Se siamo in grado di controllare il processo e la tempistica per eseguire i record o aggiornare i record nel database è di circa 3 minuti e 58 secondi. Qui loop eseguirà l’istruzione commit dopo ogni aggiornamento del record, quindi il tempo per aggiornare il record è superiore al singolo record di commit.

Scenario 3 : AGGIORNAMENTO di MASSA, l’utilizzo di MASSA di RACCOGLIERE e PER TUTTI

dichiara

tipo di customer_t tavolo del Cliente%rowtype indice

pls_integer; l_customer_data customer_t;

iniziare a Selezionare *

massa raccogliere in l_customer_data dal Cliente;

forall rec a 1 .. l_dati clienti.count

aggiorna customer_entry e imposta e. customer_no= l_customer_data (rec).il nome del cliente,

e.customer_name= l_employee_data(rec).customer_name,

e.customer_product= l_employee_data(rec).customer_product

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

commit;

end;

PL / SQL procedura completata con successo.

Trascorso: 00: 00: 53.55

Il metodo bulk collect è un metodo più veloce rispetto ai metodi tradizionali. Abbiamo bisogno di creare una variabile di tipo in cui possiamo recuperare tutti i dati del cliente e abbiamo bisogno di utilizzare l’istruzione bulk collect nella clausola forall in modo che i record nella clausola forall o nella tabella specificata vengano aggiornati correttamente. Se possiamo vedere il tempo trascorso è di circa 54 secondi che è più veloce di altri metodi.

4. AGGIORNAMENTO DIRETTO SQL

begin

aggiornamento customer_entry ent

set (customer_no, customer_name, customer_product) =

( selezionare customer_no, customer_name, customer_product dal cliente c dove c.id_cliente= ent.customer_id)

dove c.customer_id in (selezionare customer_id dal cliente);

commit;

end;

PL / SQL procedura completata con successo.

Trascorso: 00: 00: 58.22

L’aggiornamento diretto richiederà 58 secondi per aggiornare tutti i record. se siamo in grado di confrontare che con massa raccogliere ci sono voluti 3-4 secondi extra per aggiornare tutti i record

Scenario 5 : ISTRUZIONE MERGE – il modo più Veloce per aggiornare massa di record

begin

unisci in customer_entry er utilizzando

cliente c

(er.customer_id= c. customer_id)

quando abbinato poi

aggiornamento impostato er.customer_number = c._numero cliente,

er.nome del cliente,

er.customer_product= c. customer_product;

commit;

end;

PL / SQL procedura completata con successo.

Elapsed: 00: 00: 36.23

Il modo più veloce per aggiornare la maggior parte dei record è utilizzare l’istruzione Merge. L’istruzione merge ha impiegato 36 secondi per aggiornare i record in modo veloce.

Scenario 6: AGGIORNAMENTO utilizzando il metodo di visualizzazione IN LINEA

inizia

aggiorna

(

seleziona r.customer_id, r.customer_number, r.customer_name, r.customer_product,

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

da customer_entry r, i clienti di e

dove r.id_cliente= e.customer_id

) 9

impostare customer_number = cnum

customer_name= cname,

customer_product= cprod;

commit;

fine;

di procedure PL/SQL completato con successo.

Trascorso: 00:00:37.97

Con l’utilizzo del metodo di visualizzazione in linea l’aggiornamento di massa verrà completato approssimativamente in 38 secondi, che è anche il modo veloce come l’istruzione Merge.

Cosa impariamo?

Il pensiero di ogni sviluppatore SQL o PLSQL è BULK COLLECT e FOR ALL statement è migliore per fare operazioni di massa. Se possiamo osservare i dettagli nelle precedenti 6 query, l’istruzione SQL Update darebbe le prestazioni migliori di Bulk collect e for all. Quindi prova a utilizzare il codice SQL nell’API PL/SQL per eseguire un aggiornamento rapido. Ma varierà scenario per scenario in modo da poter sempre controllare gli scenari. Se si desidera prestazioni più veloci, provare a scrivere l’istruzione merge o la vista in linea.