sql server da hız sorunu
sql server da hız sorunu
merhaba arkadaslar, sql server veritananını kullanarak bir program yazıyorum. 5 bin kayıtlık bir .dbf uzantılı dosyayı 20 dk bi sürede sql server'a atıyor. bu gecen zaman normal mi yada nasıl hızlandırabilirim.
ve arama yaptıgım kısım var duruma göre kayıt sayısı değişiyor bazen 10 bin kayıtı yada daha fazlasını buluyor. Aramalarda sql kullandım ama kayıt aranırken cok bekliyor.
bu sorunu nasıl halledebilirim?
ve arama yaptıgım kısım var duruma göre kayıt sayısı değişiyor bazen 10 bin kayıtı yada daha fazlasını buluyor. Aramalarda sql kullandım ama kayıt aranırken cok bekliyor.
bu sorunu nasıl halledebilirim?
dışardan alınan .dbf veri dosyalarının programa aktarılması gerekiyor. Bu veriler program içerisinde sürekli güncellenerek kullanılıyor. Bu aktarma işlemi ise her ay yapılıyor.
aramalar da özellikle kayıt sayısı arttıktan sonra cok fazla yavasladı , işlem yapmak neredeyse mümkün olmuyor.
ne yapacagımı bilmiyorum. yardımcı olursanız sevinirim.
aramalar da özellikle kayıt sayısı arttıktan sonra cok fazla yavasladı , işlem yapmak neredeyse mümkün olmuyor.
ne yapacagımı bilmiyorum. yardımcı olursanız sevinirim.
Selamlar,
Aktarmayı siz yapıyorsanız ne kullanıyorsunuz? Program ile atıyorsanız TTable veya TQuery ne kullandınız? Makinanızın özellikleri ne? Hangi İşletim sistemi vs. vs.
Bu soruları yanıtlarsanız size daha yardımcı olabiliriz.
Kolay Gelsin
Aktarmayı siz yapıyorsanız ne kullanıyorsunuz? Program ile atıyorsanız TTable veya TQuery ne kullandınız? Makinanızın özellikleri ne? Hangi İşletim sistemi vs. vs.
Bu soruları yanıtlarsanız size daha yardımcı olabiliriz.
Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Aktarmayı yaptığınız kod bloğunu gönderir misiniz!
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
procedure Tfrmfiyat_transferi.fiyatguncel();
begin
with katalog_stok_karti do
begin
close;
sql.clear;
sql.add('select * from '+dbedit1.text+'');
open;
end;
while not transfer_dosyasi.Eof do
begin
katalog_stok_karti.Filtered:=false;
katalog_stok_karti.Filter:='stok_no='''+transfer_dosyasi.FieldValues['stok_no']+'''';
katalog_stok_karti.Filtered:=true;
if katalog_stok_karti.RecordCount<>0 then
begin
katalog_stok_karti.Edit;
katalog_stok_karti.FieldValues['stok_no']:=transfer_dosyasi.FieldValues['stok_no'];
katalog_stok_karti.FieldValues['stok_adi']:=transfer_dosyasi.FieldValues['stok_adi'];
katalog_stok_karti.FieldValues['kdv']:=transfer_dosyasi.FieldValues['kdv'];
katalog_stok_karti.FieldValues['katalog_kodu']:=transfer_dosyasi.FieldValues['katalog_kodu'];
katalog_stok_karti.FieldValues['katalog_adi']:=transfer_dosyasi.FieldValues['katalog_adi'];
// katalog_stok_karti.FieldValues['eski_fiyat']:=transfer_dosyasi.FieldValues['eski_fiyat']);
// katalog_stok_karti.FieldValues['yeni_fiyat']:=strtofloat(transfer_dosyasi.FieldValues['yeni_fiyat']);
katalog_stok_karti.FieldValues['para_birimi']:=transfer_dosyasi.FieldValues['para_birimi'];
//katalog_stok_karti.FieldValues['degisim_orani']:=transfer_dosyasi.FieldValues['degisim_orani'];
katalog_stok_karti.FieldValues['fiyat_degisim_tarihi']:=transfer_dosyasi.FieldValues['fiyat_degisim_tarihi'];
katalog_stok_karti.Post;
end
else // insert kodları
transfer_dosyasi.Next;
end;
begin
with katalog_stok_karti do
begin
close;
sql.clear;
sql.add('select * from '+dbedit1.text+'');
open;
end;
while not transfer_dosyasi.Eof do
begin
katalog_stok_karti.Filtered:=false;
katalog_stok_karti.Filter:='stok_no='''+transfer_dosyasi.FieldValues['stok_no']+'''';
katalog_stok_karti.Filtered:=true;
if katalog_stok_karti.RecordCount<>0 then
begin
katalog_stok_karti.Edit;
katalog_stok_karti.FieldValues['stok_no']:=transfer_dosyasi.FieldValues['stok_no'];
katalog_stok_karti.FieldValues['stok_adi']:=transfer_dosyasi.FieldValues['stok_adi'];
katalog_stok_karti.FieldValues['kdv']:=transfer_dosyasi.FieldValues['kdv'];
katalog_stok_karti.FieldValues['katalog_kodu']:=transfer_dosyasi.FieldValues['katalog_kodu'];
katalog_stok_karti.FieldValues['katalog_adi']:=transfer_dosyasi.FieldValues['katalog_adi'];
// katalog_stok_karti.FieldValues['eski_fiyat']:=transfer_dosyasi.FieldValues['eski_fiyat']);
// katalog_stok_karti.FieldValues['yeni_fiyat']:=strtofloat(transfer_dosyasi.FieldValues['yeni_fiyat']);
katalog_stok_karti.FieldValues['para_birimi']:=transfer_dosyasi.FieldValues['para_birimi'];
//katalog_stok_karti.FieldValues['degisim_orani']:=transfer_dosyasi.FieldValues['degisim_orani'];
katalog_stok_karti.FieldValues['fiyat_degisim_tarihi']:=transfer_dosyasi.FieldValues['fiyat_degisim_tarihi'];
katalog_stok_karti.Post;
end
else // insert kodları
transfer_dosyasi.Next;
end;
Selamlar,
Yanıt yazarken kodlama için Code yazan butona basın ve kaynak kodlarınızı açılan yere yazın ve bitirnce de tekrar Code yazan butona basın.
Kaynak kodlar bu şekilde daha okunaklı hale geçiyor.
Bu notu geçtikten sonra sizin kodunuzdan okuduğum kadarı ile yavaş olması gayet doğal. Çünkü her hareket için Filtre koyuyorsunuz ve kayıt var mı diye kontrol ediyorsunuz. Bu yöntem sistemi belirgin bir şekilde yorar ayrıca gerek de yok.
Bunu sizin yönteminiz haricinde farklı iki yöntem ile yapabilirsiniz,
birincisi doğrudan SQL komutları kullanarak, ikincisi TDataset'de olan Locate methodu ile yapabilirsiniz.
Ama benim tavsiyem SQL komutları ile yapmanız olacaktır, o zaman hız artışı belirgin bir şekilde olacaktır.
SQL Komutları ile nasıl yaparım diye soruyorsanız, SQL'deki UPDATE komutunu kullanarak. Sizin Filtre koyarak yaptığınız arama yerine, bir adet TQuery nesnesi kullanıp, UPDATE transfer_dosyasi SET vs. vs. gibi cümleyi oluşturup, güncellenmesini istediğiniz alanları da Parametre olarak tanıtıp, ExecSQL Methodu ile (aramaya mahal vermeksizin) doğrudan güncellemeniz olmasıdır. Ama illa arama yapmam gerekiyor derseniz kodunuza bir adet Arama SQL'i koyarak da bunu yaparsınız. Emin olun sizin yaptığınızdan çok daha hızlı olacaktır.
Kolay Gelsin
Yanıt yazarken kodlama için Code yazan butona basın ve kaynak kodlarınızı açılan yere yazın ve bitirnce de tekrar Code yazan butona basın.
Kod: Tümünü seç
Örnek Kod Satırı
Bu notu geçtikten sonra sizin kodunuzdan okuduğum kadarı ile yavaş olması gayet doğal. Çünkü her hareket için Filtre koyuyorsunuz ve kayıt var mı diye kontrol ediyorsunuz. Bu yöntem sistemi belirgin bir şekilde yorar ayrıca gerek de yok.
Bunu sizin yönteminiz haricinde farklı iki yöntem ile yapabilirsiniz,
birincisi doğrudan SQL komutları kullanarak, ikincisi TDataset'de olan Locate methodu ile yapabilirsiniz.
Ama benim tavsiyem SQL komutları ile yapmanız olacaktır, o zaman hız artışı belirgin bir şekilde olacaktır.
SQL Komutları ile nasıl yaparım diye soruyorsanız, SQL'deki UPDATE komutunu kullanarak. Sizin Filtre koyarak yaptığınız arama yerine, bir adet TQuery nesnesi kullanıp, UPDATE transfer_dosyasi SET vs. vs. gibi cümleyi oluşturup, güncellenmesini istediğiniz alanları da Parametre olarak tanıtıp, ExecSQL Methodu ile (aramaya mahal vermeksizin) doğrudan güncellemeniz olmasıdır. Ama illa arama yapmam gerekiyor derseniz kodunuza bir adet Arama SQL'i koyarak da bunu yaparsınız. Emin olun sizin yaptığınızdan çok daha hızlı olacaktır.
Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/