Sql sorgu işlemciyi yüzde 50 kullanıyor ve 1 dakika sürüyor
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Sql sorgu işlemciyi yüzde 50 kullanıyor ve 1 dakika sürüyor
Arkadaşlar selalar. Firebirdde bir garip hata ile karşılaştım. İçerisinde not in ile başka bir sorgu çalıştırıyorum. sanıyorum iç içe sorgulamada sıkıntı yaşıyorum. sorgu sonucu bana bir dakkadan fazla zamanda geliyor makina kilitlenyor işlemci kullanımı yüzde 50 yi geçiyor. anlamadım gitti.
yapmak istediğim müşterilerin idlerine bakarak satışlar tablosunda verilen iki tarih arasında ödemesi olmayanları (satıstur=2) bulup bakiyeler tablsosundan bakiye bilgilerini alarak göstermek..
şu koda bakarmısınız arkadaşlar... şimdiden herkese teşekkürler
IF ORDER='' THEN ORDER:='musteriler.Adi_soyadi';
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.Close;
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Clear;
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Add('SELECT musteriler.*,(bakiyeler.satis+bakiyeler.taksitlisatis - bakiyeler.odemeler - bakiyeler.odemeler_taksit) AS BAKIYE');
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Add('FROM musteriler');
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Add('inner join bakiyeler on (musteriler.id = bakiyeler.musteri_id)');
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Add('WHERE Gizle=0 AND musteriler.Id Not In (SELECT satislar.musteri_Id FROM satislar');
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Add('WHERE satislar.tarih>='+QuotedStr(DateToStr(bsSkinDateEdit1.DATE))+' And satislar.tarih<='+QuotedStr(DateToStr(bsSkinDateEdit2.DATE))+' AND satislar.tur_id=2)');
if trim(bsSkinEdit2.Text)<>'' then Begin
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Add('and adres like '+QuotedStr('%'+bsSkinEdit2.Text+'%'));
end;
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Add('ORDER BY '+ORDER );
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.Open;
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.FetchAll;
bsSkinEdit1.Text:='Geri dönen kayıt sayısı :'+ inttostr(DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.RecordCount);
yapmak istediğim müşterilerin idlerine bakarak satışlar tablosunda verilen iki tarih arasında ödemesi olmayanları (satıstur=2) bulup bakiyeler tablsosundan bakiye bilgilerini alarak göstermek..
şu koda bakarmısınız arkadaşlar... şimdiden herkese teşekkürler
IF ORDER='' THEN ORDER:='musteriler.Adi_soyadi';
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.Close;
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Clear;
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Add('SELECT musteriler.*,(bakiyeler.satis+bakiyeler.taksitlisatis - bakiyeler.odemeler - bakiyeler.odemeler_taksit) AS BAKIYE');
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Add('FROM musteriler');
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Add('inner join bakiyeler on (musteriler.id = bakiyeler.musteri_id)');
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Add('WHERE Gizle=0 AND musteriler.Id Not In (SELECT satislar.musteri_Id FROM satislar');
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Add('WHERE satislar.tarih>='+QuotedStr(DateToStr(bsSkinDateEdit1.DATE))+' And satislar.tarih<='+QuotedStr(DateToStr(bsSkinDateEdit2.DATE))+' AND satislar.tur_id=2)');
if trim(bsSkinEdit2.Text)<>'' then Begin
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Add('and adres like '+QuotedStr('%'+bsSkinEdit2.Text+'%'));
end;
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.SelectSQL.Add('ORDER BY '+ORDER );
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.Open;
DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.FetchAll;
bsSkinEdit1.Text:='Geri dönen kayıt sayısı :'+ inttostr(DM.Q_RAP_IKI_T_ODEME_YAPMAYAN.RecordCount);
Re: Sql sorgu işlemciyi yüzde 50 kullanıyor ve 1 dakika sürüyor
Sorunuzu daha anlşılabilir bir formatta ve sadece sql'i içeren bir hale getirmeniz daha açıklayıcı ve potansiyel cevap verecekler için daha cazip olur kanaatindeyim
kolay gelsin...

kolay gelsin...
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: Sql sorgu işlemciyi yüzde 50 kullanıyor ve 1 dakika sürüyor
biraz daha anlaşılır hale getirmek istedim.
Kod: Tümünü seç
with DM.Q_RAP_IKI_T_ODEME_YAPMAYAN do begin
Close;
SelectSQL.Clear;
SelectSQL.Add('SELECT musteriler.*,(bakiyeler.satis+bakiyeler.taksitlisatis - bakiyeler.odemeler - bakiyeler.odemeler_taksit) AS BAKIYE');
SelectSQL.Add('FROM musteriler');
SelectSQL.Add('inner join bakiyeler on (musteriler.id = bakiyeler.musteri_id) WHERE Gizle=0 AND musteriler.Id Not In (SELECT satislar.musteri_Id FROM satislar ');
SelectSQL.Add('WHERE satislar.tarih>='+QuotedStr(DateToStr(bsSkinDateEdit1.DATE))+' And satislar.tarih<='+QuotedStr(DateToStr(bsSkinDateEdit2.DATE))+' AND satislar.tur_id=2)');
if trim(bsSkinEdit2.Text)<>'' then Begin
SelectSQL.Add('and adres like '+QuotedStr('%'+bsSkinEdit2.Text+'%'));
end;
SelectSQL.Add('ORDER BY '+ORDER );
Open;
FetchAll;
end;
Re: Sql sorgu işlemciyi yüzde 50 kullanıyor ve 1 dakika sürüyor
@bgoktas ın bahsettiği IBExpert gibi bir SQL aracınday sadece sorguyu yalın haliyle yazmanızı istedi. Delphi kodlarından ayıklamak zaman alacak
Sanırım sonuçta böyle bir şey olacak. Baştakı m.* yerine ya gerekli alan adlarını yazın ya da kaldırıp ibexpert veya benzeri ile dener misiniz?
Ayrıca bir de bu şekilde deneyin.
Not: : lı parametreler yerine sabit değerler de yazabilirsiniz.

Kod: Tümünü seç
SELECT m.*, (b.satis + b.taksitlisatis - b.odemeler - b.odemeler_taksit) AS BAKIYE
FROM musteriler m
INNER JOIN bakiyeler b ON (m.id = b.musteri_id)
WHERE m.Gizle = 0 AND m.Id Not In (SELECT s.musteri_Id FROM satislar s
WHERE s.tur_id = 2 AND s.tarih >= :Tarih1)
AND m.adres like '%'|| :Adres ||'%'
ORDER BY m.Adi_soyadi
Ayrıca bir de bu şekilde deneyin.
Kod: Tümünü seç
SELECT (b.satis + b.taksitlisatis - b.odemeler - b.odemeler_taksit) AS BAKIYE
FROM musteriler m, bakiyeler b
WHERE m.Gizle = 0 AND m.Id Not In (SELECT s.musteri_Id FROM satislar s
WHERE s.tur_id = 2 AND s.tarih >= :Tarih1)
AND m.adres like '%'|| :Adres ||'%'
AND b.musteri_id = m.id
ORDER BY m.Adi_soyadi
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: Sql sorgu işlemciyi yüzde 50 kullanıyor ve 1 dakika sürüyor
arkadaşlar ilgi ve alakanıza teşekkür ediyorum. Kodlardan anlamışsınızdır. yapmak istediğim şu. müşterier tablom var. diğer tablolar ona bağlı alt tablolar. bakiyer tablosu viev tablo. satışlar tablosu müşterinin satış ve ödemelrin tutulduğu tablo. ben müşteri tablosoundan baz alanları alıp, bakiyelerden bakiye bilgisini alıp kullanıcının değer vereceği date bileşenine göre 2 tarih aralığında ödeme yapmayanları buldurmak. bir haftadır çabalıyorum. kodlardaki hatayı bulamadım. sanırım iç içe sorgulamada firebird tam çözüm mü üretmiyor. çünkü bir yerdede iç içe sorgu kullanmıştım ondada sıkıntı vardı. onu inner joinle birleştirerk yaptım o sorun kayboldu. bunu istediğim gibi yapamdım. yardımcı olan arkadaşlara teşekkür ediyorum. bunu vievde yapayım diyorum od olmuyrr.
hocam yardımlarınızı bekliyorum...
hocam yardımlarınızı bekliyorum...
Re: Sql sorgu işlemciyi yüzde 50 kullanıyor ve 1 dakika sürüyor
Kodu düzenlediğim şekliyle her yapı da yapmak istediğini karşılamıyor mu? ve her ikisini de denedin mi?
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Re: Sql sorgu işlemciyi yüzde 50 kullanıyor ve 1 dakika sürüyor
View olan "Bakiyeler" tablosunun yerine view'ı oluşturan SQL cümlesini direk kullanıp (kısıtlamaları yani WHERE şartını da kullanarak) deneyebilir misin?
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: Sql sorgu işlemciyi yüzde 50 kullanıyor ve 1 dakika sürüyor
Rsimsek hocam dediklerini denedim yine aynı olmadı. Bir viev oluşturdum. ona gerekli olan tüm alanları attım. delphiden sorgulama yaparken not between kodu kullanyım dedim 30.12.1899 diye garip bir hata verdi. not between kullanamazmıyım yada iki tarih arasında olmayan kayıtarı nasıl getireyim.
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: Sql sorgu işlemciyi yüzde 50 kullanıyor ve 1 dakika sürüyor
arkadaşlar hala bir cevap buamdım sorunu çözemedim. yardım edin lütfen
Re: Sql sorgu işlemciyi yüzde 50 kullanıyor ve 1 dakika sürüyor
WHERE de kullanılan alanlar indeksli mi acaba?
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: Sql sorgu işlemciyi yüzde 50 kullanıyor ve 1 dakika sürüyor
kullandığım 3 tablom var.
müşteriler
bakiyeler
satışlar
müşterilerde Id indeksli (pk),tüm diğer tablolarda müşteri ıd olarak kullınılan alan.
bakiyerde Id ve satışlarda Id alanları indeksli (pk), yalnız bu iki tablodaki müşteri_Id ler indexli değil. sadece müşterilerdeki ıd indexli.
yapmak istediğim müşteri tablosundan bir kaç alan ile bakiyerdedeki toplam bakiyeyi göstererek bilgi amaçlı ve arama için satışlar tablosundaki tarih alanına göre kullanıcının gireceği değer aralıklarında ödeme olmayanları (tur_Id=2) bulup getirmesini istiyorum. kısaca özeti bu hocam.
müşteriler
bakiyeler
satışlar
müşterilerde Id indeksli (pk),tüm diğer tablolarda müşteri ıd olarak kullınılan alan.
bakiyerde Id ve satışlarda Id alanları indeksli (pk), yalnız bu iki tablodaki müşteri_Id ler indexli değil. sadece müşterilerdeki ıd indexli.
yapmak istediğim müşteri tablosundan bir kaç alan ile bakiyerdedeki toplam bakiyeyi göstererek bilgi amaçlı ve arama için satışlar tablosundaki tarih alanına göre kullanıcının gireceği değer aralıklarında ödeme olmayanları (tur_Id=2) bulup getirmesini istiyorum. kısaca özeti bu hocam.
Re: Sql sorgu işlemciyi yüzde 50 kullanıyor ve 1 dakika sürüyor
s.a.
diğer tablolardaki müşteriid alanlarınıda indexler.
eğer tabloları ilişkilendirdiysen (fk) kendisi index oluşturmuştur zaten.
kolay gelsin.
diğer tablolardaki müşteriid alanlarınıda indexler.
eğer tabloları ilişkilendirdiysen (fk) kendisi index oluşturmuştur zaten.
burda verdiği hata mesajının tamamını verseydin keşke. parametre kullanmıyorsan tarih formatında bir hata olabilir.delphiden sorgulama yaparken not between kodu kullanyım dedim 30.12.1899 diye garip bir hata verdi. not between kullanamazmıyım yada iki tarih arasında olmayan kayıtarı nasıl getireyim.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim