SQL Server da hızlı güncelleme nasıl yapılabilir?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
PROMETHUS
Üye
Mesajlar: 6
Kayıt: 14 Haz 2003 10:38
İletişim:

SQL Server da hızlı güncelleme nasıl yapılabilir?

Mesaj gönderen PROMETHUS »

Selam,
sql serverda 1.648.256 satır bir veri girişini yaptım. bunlar üzerinde güncelleme yapmak istiyorum ama çok uzun zaman alıyor.güncellemyi CURSOR özelliğini kullanarak yapıyorum ama çok yavaş kayıt yapıyor.
bunu hızlandırmanın bir yolu var mı?
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Selam,

1. Query ile UPDATE cümleciği yazıp bunu ExecSQL çalıştırabilirsin.

2. Bir stored procedure yazıp, buna parametre geçip öyle update yapabilirsin.

Bir de nasıl update'ler yapıyorsun? Tek kayıt üzerindemi, yoksa 300-500 bin kayıt üzerinde mi? Örnek kodu gönderebilirsen daha farklı çözümlerde olabilir.

Kolay gelsin.
PROMETHUS
Üye
Mesajlar: 6
Kayıt: 14 Haz 2003 10:38
İletişim:

Mesaj gönderen PROMETHUS »

aşagıdaki gibi bir sql ifadesi kullandım bütün kayıtları baştan sonuna kadar tarıyor ve tararken de günceleme yapıyorum

use lotdata
declare im cursor
local
for select 1cek,2cek,3cek,4cek,5cek,6cek from loto
for update of m1,m2,m3,m4,m5
declare @c int
open im
fetch im
set @c=1

while @c<1249076
begin
update loto
set [m1]=([2cek]-[1cek]),
[m2]=([3cek]-[2cek]),
[m3]=([4cek]-[3cek]),
[m4]=([5cek]-[4cek]),
[m5]=([6cek]-[5cek])
where current of im
fetch im
set @c=@c+1
end
close im
deallocate im
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

birkaç tavsiyem var, ancak denemek lazım. 100-150 bin kayıtta deneyip karşılaştırabilirsin.

1. Eğer index yoksa, başa KOD isimli bir autoinc alan ekleyip, indexle.

2. Query ile direk UPDATE cümleciği yazıp, bunu ExecSQL ile çalıştır. Şuna benzer birşey olacak.

UPDATE LOTO
set [m1]=([2cek]-[1cek]),
[m2]=([3cek]-[2cek]),
[m3]=([4cek]-[3cek]),
[m4]=([5cek]-[4cek]),
[m5]=([6cek]-[5cek])

3. ikinci adımdaki olayı stored procedure ile yap.

Kolay gelsin.
PROMETHUS
Üye
Mesajlar: 6
Kayıt: 14 Haz 2003 10:38
İletişim:

Mesaj gönderen PROMETHUS »

ilgi ve alakanıza teşekkürler...
table a bir indeks ekledim ve imleçleri kaldırdım
direk update kullandım..sonuç:
3 gün süren bir güncelleme 3 dakika sürdü :))
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

"El elden, akıl akıldan üstündür." dememiş mi atalarımız :idea:

buradaki üstünlük bilinen yöntemleri uygulamak, amerikayı yeniden keşfetmemektir!
Cevapla