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.
Leave a Reply