[ stanbran @ 18.03.2005. 17:12 ] @
| Moze mi neko pomoci sa sljedecim problemom :
Imam listu (ListBox), vezana preko DataView sa jednim Dataset-om (jedna MySQL tabela). Hocu brisati 4000-5000 rekorda iz lista/tabele. Ako iteriram Rows iz tabele, provjerim za svaku ako je treba brisati, pa je brisem sa Delete(), traje mi sve nekoliko minuta (!).
Ako upotrebim OdbcCommand (stavim "DELETE FROM ..." u njemu) i zovem ExecuteNonQuery(), pa citam ponovo ceo dataset vezan za moju listu iz tabele, sve traje 2-3 sekunde !
Da li ima neko objasnjenje zasto prva metoda tako dugo traje ?
Hvala i pozdrav,
Stanbran |
[ eon @ 19.03.2005. 22:50 ] @
Za svako Delete() odabrani row se oznaci kao obrisan. DataAdapter ima DeleteCommand koji izgleda otprilike (ako je rucno pises) "DELETE FROM [TABLE] WHERE [PRIMARY_KEY] = @PRIMARY_KEY (ako je konstruise command builder, onda je jos veca i komplikovanija radi obezbjedjivanja konkurentnog pristupa bazi).
U jednom trenutku moze samo jedan red obrisati. Kada pozoves DataAdapter.Update(dataset, datatable) - za svaki od tvojih 4-5 hiljada slogova izvrsava se po jedna DeleteCommand prema bazi. Da ne spominjem sporost iteriranja kroz dataset za vrijeme dok si oznacavao redove za brisanje.
Ako medjutim, upotrijebis DELETE FROM TABLE WHERE [KRITERIJ PO KOM ODLUCUJES BRISANJE] - zadajes samo jedanput komandu bazi podataka, koja uz svoje optimizirane algoritme to obavi relativno brzo.
Neka me neko ispravi ako grijesim ili ako sam pogresno shvatio pitanje. :)
[ sekretar @ 20.03.2005. 01:17 ] @
Odličan odgovor ostaje u gmail arhivi :)
--
Signature:
(appended at the end of all outgoing messages)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.