Articles

SQL WORLD

edellisessä artikkelissani olen antanut idean siitä, miten SQL: n tietueet päivitetään. Tässä artikkelissa haluan antaa yksityiskohtaisen käsityksen siitä, miten päivittää suurin osa tietueista Oracle-tietokannassa useita esimerkkejä.Haluan antaa esimerkkejä päivitys irtotavarana kirjaa oracle yksi taulukko nimetty asiakas ja muut taulukon nimetty yritys.

mitkä ovat eri tapoja päivittää suurin osa tietueista Oraclen tietokannassa?

on olemassa erilaisia menetelmiä, joilla päivitämme suuren osan Oraclen tietokannasta löytyvistä tietueista. Haluaisin keskustella seuraavista tavoista yksityiskohtaisesti tosielämän teollisuuden esimerkkejä. Nämä esimerkit antavat sinulle selkeän käsityksen Oraclen päivitysprosessista yksityiskohtaisesti.

oletukset:

oletamme, että on olemassa kaksi taulukkoa – asiakastiedot – joka on asiakkaan nimi, joka vierailee määrätyllä e-kaupan sivustolla. Asiakaspöydässä on miljoonia tietueita, mutta oletamme, että asiakaspöydässä on 999999 tietuetta. On olemassa toinen taulukko nimeltä Customer_Entry joka on myös 777777 kirjaa. Ensisijainen avain Customer_ID on molemmissa taulukoissa.

Päivitystyypit:

1.Päivitä käyttäen silmukkaa

2.Perinteinen päivitys (tietueiden päivittäminen yksittäin)

3.Bulk update käyttäen BULK COLLECT ja kaikille lausuma

4.Suora päivitys SQL

5.Yhdistä lauseke päivityksiin Tallenna nopeasti

6.Päivitä käyttäen INLINE view-menetelmää.

meidän on suoritettava kaikki tavat ja tarkistettava eri päivitysilmoitusten e-suorituskyky.

Skenaario 1 : Traditional way to update yksittäisiä tietueita ja commit after for loop

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 procedure successfully completed.

kulunut: 00:02:42.36

Jos voit tarkistaa ensimmäisen esimerkin, jossa yritämme päivittää kaikki tietueet for Loopilla ja käyttää sitten toimituslausetta. Jos voit suorittaa tietyn PL SQL lohko. Se kestää noin 2 minuuttia ja 42 sekuntia menettelyn loppuun saattamiseen ja tietueiden päivittämiseen.

skenaario 2 : perinteinen tapa päivittää yksittäisiä tietueita ja toimittaa sisällä loop

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;
end loop;
end;
/

PL/SQL procedure successfully completed.

kulunut aika: 00:03:58.39

Jos voimme tarkistaa prosessin ja ajoituksen tietueiden suorittamiseen tai päivittää tietueita tietokannassa, se on noin 3 minuuttia ja 58 sekuntia. Tässä silmukassa suoritetaan toimitusilmoitus jokaisen tietuepäivityksen jälkeen, joten aika päivittää tietue on suurempi kuin yksittäinen toimitus-tietue.

skenaario 3 : BULK UPDATE käyttäen BULK COLLECT and FOR ALL

ilmoittaa

type customer_t on taulukko customer%rowtype-indeksistä

pls_integer; l_customer_data customer_t;

aloita valitse *

bulk collect into l_customer_data asiakkaalta;

forall rec in 1 .. l_kustomer_data.count

update customer_entry e set e. customer_no= l_customer_data (rec).customer_no,

e.customer_name= l_työntekijä_data(rec).customer_name,

e.customer_product= l_työntekijä_data(rec).customer_product

where R.customer_id= l_työntekijä_data(rec).customer_id;

commit;

end;

PL / SQL-menettely suoritettu onnistuneesti.

kulunut: 00:00:53.55

irtotavarankeruumenetelmä on nopeampi menetelmä kuin perinteiset menetelmät. Vaadimme luomaan tyyppimuuttujan, josta voimme noutaa kaikki asiakastiedot, ja meidän on käytettävä joukkokeräyslauseketta kaikissa lausekkeissa, jotta kaikkien lausekkeiden tai määritetyn taulukon tietueet päivitetään oikein. Jos voimme nähdä kulunut aika se on noin 54 sekuntia, joka on nopeampi kuin muut menetelmät.

4. Suora päivitys SQL

begin

update customer_entry ent

set (customer_no, customer_name, customer_product) =

( valitse customer_no, customer_name, customer_product from customer c where C.customer_id= ent.customer_id)

missä c.customer_id in (valitse customer_id asiakkaalta);

commit;

end;

PL / SQL-menettely onnistuneesti suoritettu.

kulunut: 00:00:58.22

suora päivitys vie 58 sekuntia kaikkien tietueiden päivittämiseen. jos voidaan verrata, että bulk Collectionin kanssa kesti 3-4 sekuntia ylimääräistä päivittää kaikki tietueet

skenaario 5 : MERGE STATEMENT – nopein tapa päivittää bulk of records

begin

merge into customer_entry ER using

customer c

on (er.customer_id= C. customer_id)

kun sovitettu sitten

Päivitä joukko er.customer_number= c.customer_number,

er.cutomer_name= C. customer_name,

er.customer_product= C. customer_product;

commit;

end;

PL / SQL-menettely onnistuneesti suoritettu.

kulunut: 00:00:36.23

nopein tapa päivittää suurin osa tietueista on Yhdistämislauseella. Yhdistämislausunto kesti 36 sekuntia päivittää tietueet nopeasti.

skenaario 6 :päivitys INLINE View-menetelmällä

begin

päivitys

(

valitse R.customer_id, R.customer_number, r.customer_name, r.customer_product,

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

from customer_entry r, customer e

where R.customer_id= e.customer_id

) 9

set customer_number = cnum

customer_name= cname,

customer_product= cprod;

commit;

End;

PL/SQL-menettely suoritettu onnistuneesti.

kulunut: 00:00:37.97

inline view-menetelmällä bulk-päivitys valmistuu noin 38 sekunnissa, mikä on myös nopea tapa kuten Yhdistämislauseke.

mitä opimme?

jokaisen SQL: n tai PLSQL: n kehittäjän ajattelu on BULK COLLECT ja kaikille statement on parempi bulk-operaatioiden tekemiseen. Jos voimme tarkkailla yksityiskohtia edellä 6 kyselyt päivitys SQL selvitys olisi antaa paremman suorituskyvyn kuin irtotavarana kerätä ja kaikille. Joten yritä käyttää SQL-koodia PL / SQL API tehdä nopea päivitys. Mutta se vaihtelee skenaariosta toiseen, joten voit aina tarkistaa skenaariot. Jos haluat nopeimman suorituskyvyn, yritä kirjoittaa yhdistämislausunto tai Inline-näkymä.