sql server da hız sorunu

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
dilruba
Üye
Mesajlar: 39
Kayıt: 14 Oca 2005 05:06

sql server da hız sorunu

Mesaj gönderen dilruba »

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?
dilruba
Üye
Mesajlar: 39
Kayıt: 14 Oca 2005 05:06

Mesaj gönderen dilruba »

tekrar merhaba arkadaslar, gecen süre daha az kayıtlar için gecerliydi. bi düzeltme yapayım 40 dk bilgileri ancak atabiliyorum. tablelarda index kullandım ayrıca. querileri de indexleri baz alarak yapıyorum.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Atmaktan kastınız nedir, dataları restore etmek falan mı? Ayrıca indexleme select işlemi için hızlandırır ama bununla birlikte insert,update işlemlerini yavaşlatır.
dilruba
Üye
Mesajlar: 39
Kayıt: 14 Oca 2005 05:06

Mesaj gönderen dilruba »

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.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

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
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
dilruba
Üye
Mesajlar: 39
Kayıt: 14 Oca 2005 05:06

Mesaj gönderen dilruba »

Aktarma işlemi yazdıgım programın içinden yapılıyor.Tadoquery kullanıyorum .
Bilgisayarım intel pentium(R) M 1.6 Ghz , 512 ram ve işletim sistemim 2000
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Aktarmayı yaptığınız kod bloğunu gönderir misiniz!
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
dilruba
Üye
Mesajlar: 39
Kayıt: 14 Oca 2005 05:06

Mesaj gönderen dilruba »

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;
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

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.

Kod: Tümünü seç

Örnek Kod Satırı
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
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla