[ miličić.marko @ 26.07.2005. 07:52 ] @
| Imam UPDATE upit sledeceg tipa:
-------------------------------
UPDATE tabela01 SET kolona01 =
(SELECT tabela02.kolona01
FROM tabela02
WHERE tabela01.kolona02 = tabela02.kolona02)
Drugim recima, U tabelu uvodim kontrolisanu redundansu tako sto sam dodao jednu kolonu. Ovim upitom popunjavam tu novu kolonu.
Ne bi trebalo da je slozeno ali me interesuju vase procene koliko bi jedan ovakav upit potrosio vremena nad tabelom sa 300 miliona redova!
P.S
Pitam za savet zato sto pretpostavljam da je dosta vremena u pitanju, a mozda je neko imao iskustva sa tako velikim tabelama. |
[ rafiki @ 28.07.2005. 12:27 ] @
Procena vremena trajanja ovakve operacije zavisi od platforme na kojoj se radi.
Nije isto ako se radi na PC racunaru sa Pentium procesorom i Personal Oracle DB ili na nekoj 64-bitnoj viseprocesorskoj azdaji sa 128GB memorije.
Nego, jedno potpitanje: jesi li siguran da imas dovoljo velik temporary tablespace (ako je Oracle u pitanju)? Ako se ne varam, upit koji si naveo ce prvo da odradi update oko 300 miliona zapisa, pa ces tek onda da uradis Commit. A za update 300 miliona redova ce ti trebati VEEELIKI temp tablespace.
Savet: napisi upit u PL/SQL-u (ili necem slicnom), pa posle svakih n update-a uradi commit. Time ces smanjiti potreban temp tbspc. I ubaci neki marker, posle koga radis commit, da znas dokle si stigao sa obradom. Ako nesto pukne samo nastavis posao od poslednjeg markera.
Pozdrav
[ miličić.marko @ 01.08.2005. 07:49 ] @
Problem je resen inkrementalnim updateovanjem tabele!
Hvala na sugestiji!
[ obucina @ 01.08.2005. 08:46 ] @
Na svaki UPDATE imas SELECT.
300M UPDATE + 300M SELECT upita = Ne pokusavaj
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.