Çok yavaş çalışan bi sorgu.Bu sorguya bi bakabilirmisiniz.
Çok yavaş çalışan bi sorgu.Bu sorguya bi bakabilirmisiniz.
Sel.al.arkadaşlar.firebird vt kullanıyorum.2 tablomda ortalama 500 kadar kayıt var.iç içe yazdığım sorgu anormal derecede yavaş çalışıyor.
select HASTAAD, HASTANO, HASTASOYAD, MURACAATNO, SERVISADI, SERVISKODU, GELISNO, DRADI, DRKODU, GIRISTARIHI from GELISLERDETAY
where GELISNO IN (SELECT DISTINCT GELISNO FROM HIZMETLER
WHERE ISLEMTURU='LABORATUVAR' AND TARIH>=:GTARIH AND TARIH<=:BTARIH and DURUM='H')
bu sorguyu bi incelemeniz mümkünmü arkadaşlar.anormal derecede yavaş çalışıyor.bu sorguyu nasıl hızlandıra bilirim.denemek için sp ile yaptım hiç bi fark olmadı.
select HASTAAD, HASTANO, HASTASOYAD, MURACAATNO, SERVISADI, SERVISKODU, GELISNO, DRADI, DRKODU, GIRISTARIHI from GELISLERDETAY
where GELISNO IN (SELECT DISTINCT GELISNO FROM HIZMETLER
WHERE ISLEMTURU='LABORATUVAR' AND TARIH>=:GTARIH AND TARIH<=:BTARIH and DURUM='H')
bu sorguyu bi incelemeniz mümkünmü arkadaşlar.anormal derecede yavaş çalışıyor.bu sorguyu nasıl hızlandıra bilirim.denemek için sp ile yaptım hiç bi fark olmadı.
Her ne kadar defalarca söylenmişse de tekrarlıyayım. Where kısmındaki kıyaslama alanlarını INDEKS li olmaslı perfomansı artırır bu ilk düşünülecek durum. İkincisi IN kullanırken dikkat etmek lazım Ben her kayıtta IN den sonraki SELECT in çalıştığını düşünüyorum Dolaysıyla olayı JOIN ile yapman perfomansı artıracaktır
h.TARIH>=:GTARIH AND h.TARIH<=:BTARIH yerine h.TARIH BETWEEN :GTARIH AND :BTARIH kullanabilirsin
Kod: Tümünü seç
select gd.HASTAAD, gd.HASTANO, gd.HASTASOYAD, gd.MURACAATNO, gd.SERVISADI, gd.SERVISKODU, gd.GELISNO, gd.DRADI, gd.DRKODU, gd.GIRISTARIHI from GELISLERDETAY gd, HIZMETLER h
where h.ISLEMTURU='LABORATUVAR' AND h.TARIH BETWEEN :GTARIH AND :BTARIH and h.DURUM='H'
and gd.GELISNO = h.GELISNO
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kod: Tümünü seç
E ISLEMTURU='LABORATUVAR' AND TARIH>=:GTARIH AND TARIH<=:BTARIH and DURUM='H')
DURUM u integer yapın, gerekli açıklamayı calculated yaparsınız,
TARIH < > .. ifadesini betweenle yazın, hız olarak farkedermi bilmiyorum ama okunaklılığı artar.
ek: @recep abi ne zaman yazdın ya merak ettimde bu inin bu şekilde çalıştığını nasıl anladınız, ben kendi projemde aynı tipte iki sorguyu in le ve join ile denemiştim, ibexpertte kayıt getirme süreleri aynı, join in hazırlanma süresi daha uzundu benmi yanlış yapıyorum yoksa
.-.-.-.-.-.-.-. ^_^
Arkadaşlar çok tşekkür ederim sorunu şu şekilde çözdüm.yardımlarınız için teşekkür ederim gayette iyi çalışıyor.
select DISTINCT(GELISLERDETAY.GELISNO),GELISLERDETAY.GELISNO,GELISLERDETAY.HASTAAD, GELISLERDETAY.HASTANO, GELISLERDETAY.HASTASOYAD, GELISLERDETAY.MURACAATNO, GELISLERDETAY.SERVISADI, GELISLERDETAY.SERVISKODU, GELISLERDETAY.DRADI, GELISLERDETAY.DRKODU, GELISLERDETAY.GIRISTARIHI from GELISLERDETAY , HIZMETLER
where HIZMETLER.ISLEMTURU='LABORATUVAR' AND HIZMETLER.TARIH BETWEEN :GTARIH AND :BTARIH and HIZMETLER.DURUM='H'
and GELISLERDETAY.GELISNO =HIZMETLER.GELISNO
tşk.ederim receb abi saolasın Allah kolaylık versin.
select DISTINCT(GELISLERDETAY.GELISNO),GELISLERDETAY.GELISNO,GELISLERDETAY.HASTAAD, GELISLERDETAY.HASTANO, GELISLERDETAY.HASTASOYAD, GELISLERDETAY.MURACAATNO, GELISLERDETAY.SERVISADI, GELISLERDETAY.SERVISKODU, GELISLERDETAY.DRADI, GELISLERDETAY.DRKODU, GELISLERDETAY.GIRISTARIHI from GELISLERDETAY , HIZMETLER
where HIZMETLER.ISLEMTURU='LABORATUVAR' AND HIZMETLER.TARIH BETWEEN :GTARIH AND :BTARIH and HIZMETLER.DURUM='H'
and GELISLERDETAY.GELISNO =HIZMETLER.GELISNO
tşk.ederim receb abi saolasın Allah kolaylık versin.
Recep Abi,
IN kullanımında eğer sonraki alt sorgu ana sorgudan bagımsız ise ilk once o hesaplanır ve her satırda calismaz...
boyle bir cumle Query optimizer tarafından
gibi bir şekle donuşturulerek çalıştırılır...
Fakat altsorguda eğer ana sorgu ile bir ilişki var ise
Belk itam anlaşılır bir örnek olmadı fakat yukarıdaki tarzda altsorugnun ana sorgu ile de bir ilşkisi var ise o zaman Recep Abi'nin dediği gibi her satırda yeniden hesaplanan bir altsorug karşımıza çıkar ki bunu mümkün ise join şekline donuşturmek ciddi performans sağlayacaktır.
Kolay gelsin....
IN kullanımında eğer sonraki alt sorgu ana sorgudan bagımsız ise ilk once o hesaplanır ve her satırda calismaz...
Kod: Tümünü seç
Select * from ULKE where ULKE_NO in( Select ULKE_NO from DIGER_TABLO)
Kod: Tümünü seç
Select * from ULKE where ULKE_NO in( 1,5,10,15,60)
Fakat altsorguda eğer ana sorgu ile bir ilişki var ise
Kod: Tümünü seç
Select * from ULKE as U where
(Select T. ULKE_NO from TABLO as T where T.ALAN=U.ALAN)
Kolay gelsin....
* http://www.fahrettin.org Manzara Fotoğraflarım...
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...
evet abi aynısını soyluyorum zaten ana sorgudan alan kullanılması durumunda mecburen her satırda yeniden calisacak detay sorgu
* http://www.fahrettin.org Manzara Fotoğraflarım...
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...
hım anladım teşekkürler ben fahrettin abinin ilk söylediği şekilde denemiştim, (dbworkbench'indi sanırsam), query optimizer tarzı bir modülü vardı ve grafik olarak her bir subquerynin birbirleri ile bağlantısını ve harcadığı süreleri gösteriyordu, ama üstteki query ile bağlantısı olmayan bir şekilde denemiştim
.-.-.-.-.-.-.-. ^_^
Evet hocam önceki mesajda aynını söylemişsin. Yani sorguların birbirinden bağımsızlığı veya bağımlılığı önemlifahrettin yazdı:evet abi aynısını soyluyorum zaten ana sorgudan alan kullanılması durumunda mecburen her satırda yeniden calisacak detay sorgu
fahrettin yazdı:IN kullanımında eğer sonraki alt sorgu ana sorgudan bagımsız ise ilk once o hesaplanır ve her satırda calismaz...
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!