Articles

SQL WORLD

i min tidigare artikel har jag gett tanken på hur man uppdaterar posterna i sql. I den här artikeln vill jag ge en detaljerad uppfattning om hur man uppdaterar huvuddelen av poster i Oracle-databasen med flera exempel.Jag skulle vilja ge exempel på Uppdatera huvuddelen av poster i oracle one en tabell som heter kund och andra tabell som heter företag.

vilka är olika sätt att uppdatera huvuddelen av poster i oracle database?

det finns olika metoder som vi använder för att uppdatera huvuddelen av poster i oracle-databasen. Jag skulle vilja diskutera följande sätt i detalj med verkliga branschexempel. Dessa exempel kommer att ge dig en klar uppfattning om uppdateringsprocessen av oracle i detalj.

antaganden:

vi antar att det finns två tabeller – kundinformation – vilket är namnet på kunden besöker specificerade e handel webbplats. Det finns miljontals poster i kundtabellen men vi antar att det finns 999999 poster i kundtabellen. Det finns en annan tabell som heter Customer_Entry som också har 777777 poster. Den primära nyckeln med namnet Customer_ID finns i båda tabellerna.

typer av uppdateringar:

1.Uppdatera med för loop

2.Traditionell uppdatering (uppdatera poster individuellt)

3.Bulk uppdatering med BULK COLLECT och för alla uttalande

4.Direkt uppdatering SQL

5.Sammanfoga uttalande till uppdateringar spela in snabbt

6.Uppdatera med INLINE view-metoden.

Vi måste utföra alla sätt och måste kontrollera e-prestanda för de olika uppdateringsuttalandena.

Scenario 1 : Traditionellt sätt att uppdatera enskilda poster och begå efter för loop

börja
för cusrsor_1 in (välj * från kund)
loop
uppdatera customer_entry
set
customer_no = cursor_1.customer_no, customer_name=cursor_1.customer_name, customer_product=c. customer_product där
customer_id= c.customer_id;
End loop; begå;
end;
/

PL/SQL-proceduren har slutförts.

förfluten: 00:02: 42.36

Om du kan kontrollera det första exemplet där vi försöker uppdatera alla poster med för loop och sedan använda commit statement. Om du kan köra det specifika PL SQL-blocket. Det tar cirka 2 minuter och 42 sekunder att slutföra proceduren och uppdatera posterna.

Scenario 2: traditionellt sätt att uppdatera enskilda poster och begå inuti för loop

börja
för cusrsor_1 in (välj * från kund)
loop
uppdatera customer_entry
set
customer_no = cursor_1.customer_no, customer_name=cursor_1.customer_name, customer_product=c. customer_product där
customer_id= c.customer_id;
commit;
End loop;
end;
/

PL/SQL-proceduren har slutförts.

förfluten: 00:03: 58.39

Om vi kan kontrollera processen och tidpunkten för att utföra posterna eller uppdatera posterna i databasen är det ungefär 3 minuter och 58 sekunder. Här kommer loop att köra commit-uttalande efter varje postuppdatering så tiden för att uppdatera posten är högre än single commit-post.

Scenario 3 : BULKUPPDATERING med BULKSAMLING och för alla

deklarera

typ customer_t är Tabell över kund%rowtype index av

pls_integer; l_customer_data customer_t;

börja välj *

bulk samla in i l_customer_data från kunden;

forall rec in 1 .. l_customer_data.räkna

uppdatera customer_entry E set e. customer_no= l_customer_data (rec).customer_no,

e. customer_name= l_ employee_data (rec).customer_name,

e. customer_product= l_ employee_data (rec).customer_product

där R. customer_id= l_ employee_data (rec).customer_id;

commit;

end;

PL / SQL-proceduren har slutförts.

förfluten: 00: 00: 53.55

bulksamlingsmetoden är snabbare metod än traditionella metoder. Vi behöver skapa en typvariabel där vi kan hämta all kunddata och vi måste använda bulk collect statement I forall-klausulen så att posterna i forall-klausulen eller den angivna tabellen uppdateras korrekt. Om vi kan se den förflutna tiden är det cirka 54 sekunder vilket är snabbare än andra metoder.

4. Direkt uppdatering SQL

börja

uppdatera customer_entry ent

set (customer_no, customer_name, customer_product) =

( välj customer_no, customer_name, customer_product från kund c där c.customer_id= ent.customer_id)

där C. customer_id in (välj customer_id från kund);

begå;

avsluta;

PL/SQL-proceduren har slutförts.

förfluten: 00:00: 58.22

den direkta uppdateringen tar 58 sekunder för att uppdatera alla poster. om vi kan jämföra det med bulk collect tog det 3-4 sekunder extra att uppdatera alla poster

Scenario 5 : MERGE STATEMENT – snabbaste sättet att uppdatera huvuddelen av poster

börja

sammanfoga till customer_entry er med

kund c

på (er.customer_id= C. customer_id)

När den matchas sedan

uppdatera set er.customer_number= c.kundnummer,

er.cutomer_name= C. customer_name,

er.customer_product= c. customer_product;

commit;

end;

PL / SQL-proceduren har slutförts.

förfluten: 00: 00: 36.23

det snabbaste sättet att uppdatera huvuddelen av poster är att använda Sammanslagningsuttalandet. Sammanslagningsuttalandet tog 36 sekunder att uppdatera poster på snabbt sätt.

Scenario 6: uppdatera med Inline-visningsmetod

börja

uppdatera

(

välj r.customer_id, r.customer_number, r.customer_name, r.customer_product,

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

från customer_entry r, kund e

där r.customer_id= e.customer_id

) 9

ange customer_number = cnum

customer_name= cname,

customer_product= cprod;

commit;

end;

PL/SQL-proceduren har slutförts.

förfluten: 00: 00: 37.97

med hjälp av inline view-metoden kommer massuppdateringen att slutföras ungefär i 38 sekunder vilket också är det snabba sättet som Sammanslagningsuttalande.

Vad lär vi oss?

tänkandet på varje SQL-eller PLSQL-utvecklare är BULK COLLECT och för alla uttalanden är bättre för att göra bulkoperationer. Om vi kan observera detaljerna i ovanstående 6 frågor skulle update SQL-uttalandet ge bättre prestanda än Bulk collect och för alla. Så försök att använda SQL-kod i PL / SQL API för att göra snabb uppdatering. Men det kommer att variera scenario till scenario så att du alltid kan kontrollera scenarierna. Om du vill ha snabbaste prestanda försök att skriva merge statement eller inline view.