Firebird DB Çok Yavaş Sorgularım Yardım Lütfen

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
gokhanoz
Üye
Mesajlar: 3
Kayıt: 08 Eki 2014 02:53

Firebird DB Çok Yavaş Sorgularım Yardım Lütfen

Mesaj gönderen gokhanoz »

Merhabalar Arkadaşlar Uzun Süredir Netleştiremediğim Bir çok denememde yanıldığım sorguların program'da yavaş çekme problemini uzun süredir yaşamaktayım indexleme araştırmalarım sonucunda bir kaç adım attım fakat bir türlü randıman alamadım lütfen bu konuda bana destek olun sizden örneklemeler çözümler beklıyorum hoşcakalın. şimdiden çok teşekkürler.
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Firebird DB Çok Yavaş Sorgularım Yardım Lütfen

Mesaj gönderen greenegitim »

Mücadele güzelleştirir!
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Firebird DB Çok Yavaş Sorgularım Yardım Lütfen

Mesaj gönderen sabanakman »

Bu durum biraz da sorgularınızla alakalı bir durumdur. Mesela Kart ve Hareket toplamı alan iki sorgu arasında dağlar kadar fark vardır.
Mesela borç ve alacak toplamlarını bulan bir sorgu

Kod: Tümünü seç

select
  ana.KODU, ana.ADI,
  (select sum(BORC) from HAREKET where KART_ID=ana.ID) as BORC,
  (select sum(ALACAK) from HAREKET where KART_ID=ana.ID) as ALACAK
from KART as ana
aşağıdaki şekle dönüştürülmelidir.

Kod: Tümünü seç

select
  ana.KODU, ana.ADI, alt.BORC, alt.ALACAK from KART as ana
left join
  (select KART_ID, sum(BORC) as BORC, sum(ALACAK) as ALACAK from HAREKET group by KART_ID) as alt
on alt.KART_ID=ana.ID
Üstelik burada HAREKET tablosunda KART_ID alanına göre eklenmiş bir indeks sorguyu daha da hızlandıracaktır. Kısacası sadece indeks tek başına çözüm değildir, sorgu içi döngüyü de minimum düzeyde tutacak sorgular yazmalısınız.

Özetle aradaki farkı belirtmek gerekirse, üstteki sorguda hem borç hem de alacak alanları için her kart için 2 kere toplama işlemi yapılmaktadır. Tabi indeks yoksa bütün HAREKET tablosu baştan sona taranacaktır bu daha da feci bir durumdur. İndeks eklense bile bu yöntem hantal bir yöntemdir. Alttaki sorguda ise (group by KART_ID) öncelikle her kart için toplamlar hesaplanmış daha sonra hesaplanan değerler ilgili kartlara (left join ile) ilişkilendirerek liste alınmıştır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
gokhanoz
Üye
Mesajlar: 3
Kayıt: 08 Eki 2014 02:53

Re: Firebird DB Çok Yavaş Sorgularım Yardım Lütfen

Mesaj gönderen gokhanoz »

Saban Bey Öncelikle Çok Teşekkürler İlginiz İçin

1.Sorgularım 2. Şemada Anlattığınız Gibi Bir Çok Sorguyu Tek Bir Satırda Bulusturuyorum. Bu Durum Geçerliliğini Koruyor .
2. Firebird'de İndexleme Mantığı Konusunda Epeyce Cahilim Arkadaşların Verdiği Linklerdende Araştırmalarımı Yaptım .
Bunlardan Yola Çıkarak İndexlemenin Herhangi Bir Mantığının Olmadığını Söylüyor Çoğu Kişiler ve Bende 1000 Gecik Varyasyon Denedim . Fakat
Sonuc Alamadım Ne yazikki Sorgularım bir tablodan bir ürünü çağırmam 5 sn sürüyor 2 veya 3 farklı tablodan veri çekmeye kalktığımda ise 1.30 2 dk
arasında bir zaman alıyor ( örneğin 100 adet ürün ismini bir tablodan cağrıorum ürün fiyatını ayrı bir tablodan cağrıorum ürün adetini ayrı bir tablodan
çağırıorum ) bu durumda gerçekten sistemim tabiri caizse felc gecirior .
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Firebird DB Çok Yavaş Sorgularım Yardım Lütfen

Mesaj gönderen sabanakman »

Mesela yukarıda iki yapıya nispeten arada kalmış bir başka teknik de alttaki gibidir. Bu teknik, ilk teknikten hızlı ama ikinci teknikten yavaş çalışır.

Kod: Tümünü seç

select
  ana.ID, max(ana.KODU) as KODU, max(ana.ADI) as ADI, sum(alt.BORC) as BORC, sum(alt.ALACAK) as ALACAK
from KART as ana
left join HAREKET as alt on alt.KART_ID=ana.ID
group by ana.ID
İndeksleme aslında çok önemli. Temel kıyas ve gruplama yaptığınız alanlarda muhakkak indeks tanımlı olmalı ama söylediğim gibi yazılan sorgulara göre de performans değişmektedir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla