Kayıt işleminde aşırı yavaşlık.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
sako
Üye
Mesajlar: 469
Kayıt: 11 Haz 2003 02:40
Konum: ERZURUM

Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen sako »

Ağ üzerinde çalışan bir programımız var ve doğal olarak bütün bilgisayarlar veritabanına ağ üzerinden erişiyor. Programda aşağıdaki kod ile kayıt yaparken kayıt işlemi aşırı 3-5 sn buluyor. Kodlar aşağıdadır. Yeni kayıt işlemi için başka bir yol var mıdır ki acaba ? Farklı bir önerisi olan varsa memnun olurum.

Kod: Tümünü seç

datamodulum.anatablo.Append;
datamodulum.anatabloTCNO.text:=TCNOTXT.text;
datamodulum.anatabloADSOYAD.text:=ADSOYADtXt.text;
datamodulum.anatabloGOREV.text:=gorevitxt.text;
datamodulum.anatabloGOREVYERI.text:=gorevyeritxt.text;
datamodulum.anatabloGOREVYERIILCE.text:=gorevyeriilcetxt.text;
datamodulum.anatabloGOREVLENDIRILDIGIKURUM.text:=gorevlendirildigikurumtxt.text;
datamodulum.anatabloGOREVLENDIRILDIGIKURUMILCE.text:=gorevlendirildigiilcetxt.text;
datamodulum.anatabloGOREVLENDIRILDIGIKADRO.text:=gorevlendirildigikadrotxt.text;
datamodulum.anatabloGOREVLENDIRMETURU.Text:=gorevlendirmeturutxt.Text;
datamodulum.anatabloGOREVLENDIRMEONAYTARIHI.text:=onaytarihitxt.Text;
datamodulum.anatabloGOREVLENDIRMEONAYSAYISI.text:=onaysayisitxt.text;
datamodulum.anatabloGOREVLENDIRMESURESI.text:=gorevlendirmesuresitxt.text;
datamodulum.anatabloUNVAN.text:=unvantxt.text;
datamodulum.anatabloHATIRLATMAGUNAY.Text:=aymigunmu.Text;
datamodulum.anatabloISLEMTARIHSAAT.Text:=DateTimeToStr(Now);
datamodulum.anatabloKULLANICIBILGISAYAR.Text:=anaform.Label14.Caption;
datamodulum.anatabloONAYTURU.Text:=ONAYTURUTXT.Text;
datamodulum.anatabloUSTYAZITARIHI.Text:=ustyazitarihitxt.Text;
datamodulum.anatabloUSTYAZISAYISI.Text:=ustyazisayisitxt.Text;
datamodulum.anatabloYANDAL.Text:= yandaltxt.text;
datamodulum.anatabloONAYBITISTARIHI.Text:=gorbitonaytarihi.Text;
datamodulum.anatabloONAYBITISSAYI.Text:=gorbitonaysayi.Text;
datamodulum.anatablo.Post;
DOĞUNUN SINIR TAŞI ERZURUM'UN DADAŞ'I
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
ertank
Üye
Mesajlar: 1520
Kayıt: 12 Eyl 2015 12:45

Re: Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen ertank »

Merhaba,

Kullandığınız veritabanını bildirmemişsiniz. Kullanılan veritabanına göre iletişimde paket sıkıştırma özelliği kullanarak işlemi bir nebze hızlandırmanız mümkün olabilir.

Kullandığınız bileşenleri bildirmemişsiniz. Bununla birlikte kayıt işlemlerini Append-Post kullanarak değil, INSERT SQL kullanarak yapmanızda fayda var. Append-Post işlemi veritabanı sunucusunda bilgim dahilinde kursör kullanır ve INSERT SQL'e göre çok yavaş çalışır.

UniDAC için harici bir geri değer çevirmeyen sadece sunucuda işlem çalıştıran TUniSQL bileşeni kullanarak parametrik olarak kayıt ekleme yapabilirsiniz.

Kod: Tümünü seç

insert into anatablo(tcno,adsoyad,gorev,gorevyeri,gorevyeriilce,gorevlendirildigikurum,gorevlendirildigikurumilce,gorevlendirildigikadro,gorevlendirmeturu,gorevlendirmeonaytarihi,gorevlendirmeonaysayisi,gorevlendirmesuresi,unvan,hatirlatmagunay,islemtarihsaat,kullanicibilgisayar,onayturu,ustyazitarihi,ustyazisayisi,yandal,onaybitistarihi,onaybitissayi)
values(:tcno,:adsoyad,:gorev,:gorevyeri,:gorevyeriilce,:gorevlendirildigikurum,:gorevlendirildigikurumilce,:gorevlendirildigikadro,:gorevlendirmeturu,:gorevlendirmeonaytarihi,:gorevlendirmeonaysayisi,:gorevlendirmesuresi,:unvan,:hatirlatmagunay,:islemtarihsaat,:kullanicibilgisayar,:onayturu,:ustyazitarihi,:ustyazisayisi,:yandal,:onaybitistarihi,:onaybitissayi)
Buna benzer bir SQL ifadesini TUniSQL.SQL içine kayıt edip kodunuzda atamaları parametrelere yaparak kullanabilir.

Kod: Tümünü seç

datamodulum.YeniKayit.ParamByName('TCNO').AsString := TCNOTXT.Text; 
datamodulum.YeniKayit.ParamByName('ADSOYAD').AsString := ADSOYADtXt.Text;
datamodulum.YeniKayit.ParamByName('GOREV').AsString := gorevitxt.Text;
datamodulum.YeniKayit.ParamByName('GOREVYERI').AsString := gorevyeritxt.Text;
datamodulum.YeniKayit.ParamByName('GOREVYERIILCE').AsString := gorevyeriilcetxt.Text;
datamodulum.YeniKayit.ParamByName('GOREVLENDIRILDIGIKURUM').AsString := gorevlendirildigikurumtxt.Text;
datamodulum.YeniKayit.ParamByName('GOREVLENDIRILDIGIKURUMILCE').AsString := gorevlendirildigiilcetxt.Text;
datamodulum.YeniKayit.ParamByName('GOREVLENDIRILDIGIKADRO').AsString := gorevlendirildigikadrotxt.Text;
datamodulum.YeniKayit.ParamByName('GOREVLENDIRMETURU').AsString := gorevlendirmeturutxt.Text;
datamodulum.YeniKayit.ParamByName('GOREVLENDIRMEONAYTARIHI').AsString := onaytarihitxt.Text;
datamodulum.YeniKayit.ParamByName('GOREVLENDIRMEONAYSAYISI').AsString := onaysayisitxt.Text;
datamodulum.YeniKayit.ParamByName('GOREVLENDIRMESURESI').AsString := gorevlendirmesuresitxt.Text;
datamodulum.YeniKayit.ParamByName('UNVAN').AsString := unvantxt.Text;
datamodulum.YeniKayit.ParamByName('HATIRLATMAGUNAY').AsString := aymigunmu.Text;
datamodulum.YeniKayit.ParamByName('ISLEMTARIHSAAT').AsDateTime := DateUtils.RecodeMilliSecond(Now, 0);
datamodulum.YeniKayit.ParamByName('KULLANICIBILGISAYAR').AsString := anaform.Label14.Caption;
datamodulum.YeniKayit.ParamByName('ONAYTURU').AsString := ONAYTURUTXT.Text;
datamodulum.YeniKayit.ParamByName('USTYAZITARIHI').AsString := ustyazitarihitxt.Text;
datamodulum.YeniKayit.ParamByName('USTYAZISAYISI').AsString := ustyazisayisitxt.Text;
datamodulum.YeniKayit.ParamByName('YANDAL').AsString := yandaltxt.Text;
datamodulum.YeniKayit.ParamByName('ONAYBITISTARIHI').AsString := gorbitonaytarihi.Text;
datamodulum.YeniKayit.ParamByName('ONAYBITISSAYI').AsString := gorbitonaysayi.Text;
datamodulum.YeniKayit.Execute();
Ekranda gösterdiğiniz tabloda sadece tazeleme (refresh) yaparak yeni kaydı gösterebilirsiniz.

NOT: Performans için YeniKayit.ParamByName() yerine YeniKayit.Params[0], YeniKayit.Params[1] şeklinde kullanmanız gerekir. Örneğin kolay anlaşılabilmesi açısından ParamByName() kullanımı gösterilmişir.
sako
Üye
Mesajlar: 469
Kayıt: 11 Haz 2003 02:40
Konum: ERZURUM

Re: Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen sako »

hocam firebird ve IbDataset kullanıyorum. Ağ üzerinde ortak veritabanı olduğu için yavaş işlem yapıyor. lokalde deneyince hız sorunu yaşamıyorum. Ve hız sorununu da sadece yeni append ile kayıt girişinde yaşıyorum. edit, delete gbi işlemlerde sıkıntı yok.
DOĞUNUN SINIR TAŞI ERZURUM'UN DADAŞ'I
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
ertank
Üye
Mesajlar: 1520
Kayıt: 12 Eyl 2015 12:45

Re: Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen ertank »

IBSQL bileşenini kullanarak yukarıdaki şekilde deneyebilirsiniz.
sako
Üye
Mesajlar: 469
Kayıt: 11 Haz 2003 02:40
Konum: ERZURUM

Re: Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen sako »

hocam kusura bakmayın ama
[Error] Unit20.pas(250): String literals may have at most 255 elements
255 karakter hatası veriyor ama ben bir türlü bölemedim kodu. :oops:
DOĞUNUN SINIR TAŞI ERZURUM'UN DADAŞ'I
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
ertank
Üye
Mesajlar: 1520
Kayıt: 12 Eyl 2015 12:45

Re: Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen ertank »

Kod: Tümünü seç

TempString := 'uzun değer' +
              'uzun değer devamı' +
              'çok uzun değer';
IDE içinde yukarıdaki örnekteki gibi 255 karakterden uzun ifadeleri oluşturabilirsiniz.
sako
Üye
Mesajlar: 469
Kayıt: 11 Haz 2003 02:40
Konum: ERZURUM

Re: Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen sako »

Hocam çok teşekkür ederim kayıt işlemim hızlandı ancak ben verdiğiniz kodları IBDataSet ile yaptım çünkü generate sayacım ve IBDataSet in BeforePost unda da bazı kontrollerim vardı ve bu işlemleri . IBSQL ile INSERT SQL kullanınca hem generate hem de BeforePost kodlarım çalışmadı.Bu durumda da kayıt işleminin benim için bir anlamı kalmadı. Bunun bir çözümü var mıdır acaba? :shock:
DOĞUNUN SINIR TAŞI ERZURUM'UN DADAŞ'I
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
ertank
Üye
Mesajlar: 1520
Kayıt: 12 Eyl 2015 12:45

Re: Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen ertank »

BeforePost kontrollerini kaydet butonu koyup tıklandığı zaman yapabilirsiniz.
Generator ile değer alan kolonu insert içine eklemeyin. Veritabanı before insert trigger içinde aşağıdaki gibi bir kod vardır. Bu kod NULL değer olması halinde devreye girip sıradan değer verecektir.

Kod: Tümünü seç

CREATE OR ALTER TRIGGER CUSTOMER_BI FOR CUSTOMER
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.CUSTOMERID IS NULL) THEN
  NEW.CUSTOMERID = GEN_ID(GEN_CUSTOMER_ID,1);
END;
zengin
Üye
Mesajlar: 215
Kayıt: 06 Ağu 2003 10:13

Re: Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen zengin »

s.a

Kardeşim Aynı şikayetlerden dolayı farklı bir yerde konu acmak istemedim ?
bende Sizin Kayıt işleminde aşırı yavaşlık. konuyu izliyorum bizlerde bir arayış icindeyiz
günümüzdeki uzaktan Firebird dataya bilgi girdikce data agırlaşıyor baglantılardan genelde internet hızıyla alakalı sürekli sorunlar yaşanıyor
bunun farklı bir hızlı Örnek TeamViewer_gibi masa üstünde bir dataya baglanan bir cözüm yolu varmıdır var ise bu konuda
ne yapılabir hızlı cözüm yıl 2022 önerisi olan arkadaşlardan bilgilendirmesini rica ediyorum
kolay gelsin
Zengin
ertank
Üye
Mesajlar: 1520
Kayıt: 12 Eyl 2015 12:45

Re: Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen ertank »

zengin yazdı: 11 May 2022 12:01 ne yapılabir hızlı cözüm
Bu gibi işlemler için middleware geliştirmeniz gerekir.
Örneğin bir REST web server geliştirip, uygulamanızın veri işlemlerini bu REST web server üzerinden yapmasını sağlayabilirsiniz.
REST web server arka planda veritabanı ile iletişim kurar. Size json string olarak verileri iletir. Ya da siz json string olarak yeni/güncelleme bilgilerini sunucuya iletirsiniz. Veritabanında değiştirilir.

Direk veritabanı erişim bileşenleri ile ekranda bilgi göstermek LAN üzerinden bağlantılar için uygundur. Ancak WAN üzerinden işlem yapma noktasına gelince en sağlıklı yöntem "middleware" kullanmaktır.

Başlangıç için çok meşakkatli gözükür. Ancak yaptıktan sonra çok rahat edersiniz.

Şahsen middleware için MARS-Curiosity REST kütüphanesini tavsiye ederim. Performansı yeterli ve esnekliği çok yüksektir. İsteyebileceğiniz birçok şey hazırdır.

Eğer sadece windows ve linux ortamı sizin için yeterli ise ve performans arayışında iseniz Synopse mORMot tavsiye ederim. Öğrenme süreci çok daha uzun ve yavaş olacaktır.
sako
Üye
Mesajlar: 469
Kayıt: 11 Haz 2003 02:40
Konum: ERZURUM

Re: Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen sako »

İnsert işlemi benim hız problemimi şu an için oldukça rahatlattı diyebilirim. Şimdi burdan sonra update işlemi için de

Kod: Tümünü seç

...
datamodulum.anatablo.selectSQL.Add('UPDATE into anatablo(tcno,adsoyad,gorev,gorevyeri,gorevyeriilce,gorevlendirildigikurum,gorevlendirildigikurumilce,gorevlendirildigikadro,gorevlendirmeturu,gorevlendirmeonaytarihi,'+
'gorevlendirmeonaysayisi,gorevlendirmesuresi,unvan,hatirlatmagunay,islemtarihsaat,kullanicibilgisayar,onayturu,ustyazitarihi,ustyazisayisi,yandal,onaybitistarihi,onaybitissayi) values(:tcno,:adsoyad,:gorev,:gorevyeri,'+
':gorevyeriilce,:gorevlendirildigikurum,:gorevlendirildigikurumilce,:gorevlendirildigikadro,:gorevlendirmeturu,:gorevlendirmeonaytarihi,:gorevlendirmeonaysayisi,:gorevlendirmesuresi,:unvan,:hatirlatmagunay,:islemtarihsaat,'+
':kullanicibilgisayar,:onayturu,:ustyazitarihi,:ustyazisayisi,:yandal,:onaybitistarihi,:onaybitissayi)');

datamodulum.Anatablo.params[0].AsString := TCNOTXT.Text;
datamodulum.Anatablo.params[1].AsString := ADSOYADtXt.Text;
datamodulum.Anatablo.params[2].AsString := gorevitxt.Text;
...
gibi bir kodlama mı kullanmam gerekiyor. Yoksa update ve delete için de farklı bir yöntem mi var ertank hocam ?
DOĞUNUN SINIR TAŞI ERZURUM'UN DADAŞ'I
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
ertank
Üye
Mesajlar: 1520
Kayıt: 12 Eyl 2015 12:45

Re: Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen ertank »

Öncelikle, kayıt ekleme, kayıt güncelleme, kayıt silme için DataModule içinde farklı bileşenler kullanılmasını tavsiye ederim. Sürekli kod içinde SQL değiştirmeye gerek kalmadan direk kullanabilirsiniz. Delphi içinde SQL komutunu bileşenin SQL özelliği içine 255 karakter limiti olmadan rahatça ekleyebilirsiniz.

Update için de benzer yöntem kullanabilirsiniz. Sadece SQL komutunuz hatalı. Onu düzeltmeniz gerekir. Ayrıca yukarıdaki tavsiyeye istinaden kayıt ekleme, değiştirme ve silme için IBSQL bileşeni kullanmanız ve IBSQL.SQL özelliğine Object Inspector kullanarak aşağıdaki SQL'i eklemeniz, sadece parametre değerlerini atayarak kullanmanız işinizi kolaylaştırır diye düşünüyorum. Ekranda veri göstermek için IBQuery nesnesi kullanmanız sağlıklı olacaktır.

Kod: Tümünü seç

datamodulum.anatablo_guncelleme.SQL.Text := 'UPDATE anatablo set tcno=:tcno,adsoyad=:adsoyad,gorev=:gorev,gorevyeri=:gorevyeri,gorevyeriilce=:gorevyeriilce,gorevlendirildigikurum=:gorevlendirildigikurum,' +
'gorevlendirildigikurumilce=:gorevlendirildigikurumilce,gorevlendirildigikadro=:gorevlendirildigikadro,gorevlendirmeturu=:gorevlendirmeturu,gorevlendirmeonaytarihi=:gorevlendirmeonaytarihi,' +
'gorevlendirmeonaysayisi=:gorevlendirmeonaysayisi,gorevlendirmesuresi=:gorevlendirmesuresi,unvan=:unvan,hatirlatmagunay=:hatirlatmagunay,islemtarihsaat=:islemtarihsaat,' +
'kullanicibilgisayar=:kullanicibilgisayar,onayturu=:onayturu,ustyazitarihi=:ustyazitarihi,ustyazisayisi=:ustyazisayisi,yandal=:yandal,onaybitistarihi=:onaybitistarihi,onaybitissayi=:onaybitissayi' +
'where TABLO_PRIMARYKEY_TEKIL_ESSIZ_KOLONU=:KAYIT_TEKIL_DEGERI';
Yukarıda TABLO_PRIMARYKEY_TEKIL_ESSIZ_KOLONU ile ifade edilmek istenen sizin tablonuz için yüksek ihtimal ile SEQUENCE (GENERATOR) ile değer alan kolon adı ile değiştirilmesi gerekmektedir.
sako
Üye
Mesajlar: 469
Kayıt: 11 Haz 2003 02:40
Konum: ERZURUM

Re: Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen sako »

Çok teşekkür ederim yardımınız için. yaklaşık 10.000 kayıt var programda ve sürekli de artıyor. Verdiğiniz yöntemler ile şu an hız sıkıntımızı aştık. Yavaşlığın olduğu tek bir yer kaldı orası da sorgu kısmı. Orada da hızlanma için bir kısım kriterler getirirsem her halde sorgudaki hız problemlerini de aşarım diye düşünüyorum. Sorgu cümlem de aşağıdaki gibidir. Bazı kriterleri aramak için bazı kısıtlamalar getirmeyi düşünüyorum. Örnek tarihleri veya üstyazı sayılarını isteğe bağlı yapmak gibi. Aşağıdaki kodlarda zannedersem bir sıkıntı yoktur. Mesela adsoyad alanına 1 harf bile yazsam arama hızım belirgin ölçüde artıyor. Ama yine de şöyle yaparsan daha iyi olur dediğiniz bir yöntem varsa alabilirim :lol:

Kod: Tümünü seç

datamodulum.anatabloarama.close;
datamodulum.anatabloarama.SelectSQL.Clear;
datamodulum.anatabloarama.selectSQL.Add('select * from anatablo where tcno like ' + QuotedStr('%' +TCNOTXT.Text )+'and YANDALVARYOK like ' + QuotedStr('%' +YANDALTXT.Text + '%')+'and adsoyad like ' + QuotedStr('%' +ADSOYADtXt.Text + '%')+'and unvan like ' + QuotedStr('%' +unvantxt.Text )+'and gorev like ' + QuotedStr('%' +gorevitxt.Text)+'and gorevlendirildigikadro like ' + QuotedStr('%' +gorevlendirildigikadrotxt.Text )+'and gorevyeriilce like ' + QuotedStr('%' +gorevyeriilcetxt.Text + '%')+'and gorevyeri like ' + QuotedStr('%' +gorevyeritxt.Text + '%')+'and onayturu like ' + QuotedStr('%' +ONAYTURUTXT.Text + '%' )
+'and GOREVLENDIRILDIGIKURUMILCE like ' + QuotedStr('%' +gorevlendirildigiilcetxt.Text + '%')+'and KULLANICIBILGISAYAR like ' + QuotedStr('%' +islemyapantxt.Text + '%')+'and GOREVLENDIRILDIGIKURUM like ' + QuotedStr('%' +gorevlendirildigikurumtxt.Text + '%')+'and durum like ' + QuotedStr('%' +DURUMUTXT.Text + '%')+'and gorevlendirmeturu like ' + QuotedStr('%' +gorevlendirmeturutxt.Text + '%')+ 'and (USTYAZITARIHI BETWEEN :ustyaziilktar AND :ustyazisontar)'+ 'and (gorevlendirmeonaysayisi BETWEEN :gorevilksay AND :gorevsonsay)'+ 'and (USTYAZISAYISI BETWEEN :ustyaziilksay AND :ustyazisonsay)'+'and (GOREVLENDIRMEONAYTARIHI BETWEEN :gorevilktar AND :gorevsontar) order by sayac desc');
datamodulum.anatabloarama.ParamByName('gorevilktar').value:=datetostr(onaytarihitxt1.Date);
datamodulum.anatabloarama.ParamByName('gorevsontar').Value:=datetostr(onaytarihitxt2.Date);
datamodulum.anatabloarama.ParamByName('ustyaziilktar').value:=datetostr(ustyazitarihitxt1.Date);
datamodulum.anatabloarama.ParamByName('ustyazisontar').Value:=datetostr(ustyazitarihitxt2.Date);
datamodulum.anatabloarama.ParamByName('ustyaziilksay').value:=ustyazisayitxt1.text;
datamodulum.anatabloarama.ParamByName('ustyazisonsay').Value:=ustyazisayitxt2.text;
datamodulum.anatabloarama.ParamByName('gorevilksay').value:=onaysayitxt1.Text;
datamodulum.anatabloarama.ParamByName('gorevsonsay').Value:=onaysayitxt2.Text;
datamodulum.anatabloarama.open;
DOĞUNUN SINIR TAŞI ERZURUM'UN DADAŞ'I
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
ertank
Üye
Mesajlar: 1520
Kayıt: 12 Eyl 2015 12:45

Re: Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen ertank »

Çok temel iki öneride bulunabilirim.

- Ekranda veri göstermeyi otomatik yapmayın. Kullanıcı görmek istediği veri kriterlerini (arama/filtreleme) girsin. Göster desin ve veri ekranda gösterilsin. Tahminen en büyük hız kazancı bu noktada olacaktır. 10.000 kayıt içinde görmek istediği ya rapordur, ya da 3-5 kayıttır. 100 tane kayıt görmesinin genelde bir faydası olmaz. Ancak kullanıcılar genelde "herşeyi göstersin" şeklinde yaklaşırlar. O da programcılar için ikilem olabiliyor.

- Sadece kullanmanız gereken kolon isimlerini SELECT içinde listeleyin. Gereksiz kolonların sorguda alınmasının bir faydası yoktur. Aksine negatif etkisi vardır. İletilecek veri miktarı artar ve göreceli olarak işlem yavaşlar (Veritabanı sunucusu daha fazla veri işlemek zorunda kalır. İstemci daha fazla veri işlemek zorunda kalır).
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2327
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Kayıt işleminde aşırı yavaşlık.

Mesaj gönderen freeman35 »

Sorgulama yapılacak alana mutlaka index tanımlanmalı.
Her kullanılan LIKE sorgunu dahada yavaşlatacaktır. Kabaca, satır okunur, field değeri, like ile yani gene kabaca if le karşılaştırılıp sonuçlandırılır. bu her satır için yapılır. çok zorunluluk olmadıkça kullanılmaktan kaçınmalı.
Ve en önemlisi sorguya eklenecek koşulların sırası iyi planlanmalı.
Senin verdiğin örnekte, varsayalım 10,000 kayıt var. tcno, like değilde equal olursa, bu ilk koşul yapılırsa, 10000 kayıt, 100-150 belki 10-15 satıra düşer, ardından tarih koşulu eklenirse, 10000 kayıda değil, bir önceki sonuca uygulanacaktır. Tabi burada OR ve AND kullanımı da önemlidir. Hatta parantezler de.
erkank nın da belirttiği gibi, select * değil sadece gereken alanlar eklenmeli. Her eklenen alan için gereksiz hafıza ve okuma yapılması yani disk erişimi engellenmeli. bu network trafiği içinde önemlidir.
Kullanıcı sorgu şartlarını belirler, bir tuşa basar. Hem bu, "bir tuşa basıcam herşeyi görücem" diyenler için gösterilebilinir. :D
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Cevapla