MSSQL Sorgulamada Hata Gönderen: SelçuK Tarih: 16 April 2008 11:34:35
Notice: Undefined index: current_action in
/home/del10000/domains/delphidunyasi.net/public_html/Sources/Subs.php on line
2391
Arkadaşlar normalde where komutunu hep alan a göre kullanırım.
Yalnız öyle bir durum oluştuki mecburen kolon başlığını kullanmam gerekiyor.
şöyleki;
Kodlama dili (sql)
SELECT adi AS [ADI], soyadi AS [SOYADI], fn_yashesap(dog_tar,simdikitarih) AS [YASI]
FROM KISILER WHERE
fn_yashesap bir User Define Functions. Şimdi Ben yaş alanında nasıl sorgulama yapacağım.
Şimdiden tşkler.
Ynt: MSSQL Sorgulamada Hata Gönderen: Opt2000 Tarih: 17 April 2008 15:38:24
Notice: Undefined index: current_action in
/home/del10000/domains/delphidunyasi.net/public_html/Sources/Subs.php on line
2391
Selam,
Normal sorgulamadan fark yok:
SELECT adi AS [ADI], soyadi AS [SOYADI], fn_yashesap(dog_tar,simdikitarih) AS [YASI]
FROM KISILER WHERE fn_yashesap(dog_tar,simdikitarih) < 18
18 yaşından küçükler.
İkinci olasılık SubQuery kullanmak:
SELECT * FROM(
SELECT adi AS [ADI], soyadi AS [SOYADI], fn_yashesap(dog_tar,simdikitarih) AS [YASI]
FROM KISILER) AS TempTable WHERE YASI < 18
gibi. Ama her iki durumda da sorgu yavaş olacaktır, özellikle kayıt sayısı fazla ise.
Kolay gelsin,
Bahadır Alkaç
Ynt: MSSQL Sorgulamada Hata Gönderen: SelçuK Tarih: 17 April 2008 16:03:58
Notice: Undefined index: current_action in
/home/del10000/domains/delphidunyasi.net/public_html/Sources/Subs.php on line
2391
Hocam ilk yöntemi denedim ancak subquery hatası aldım.
Diyorduki ya sub query kullan yada group kullandığın için having kullan.
Bende having ile sorunu hallettim ama dediğiniz gibi sorgu az kayıt olmasına rağmen yavaş çalışıyor.
Hızlı olması adına bir öneriniz varmıdır ?
Ynt: MSSQL Sorgulamada Hata Gönderen: Opt2000 Tarih: 17 April 2008 16:34:21
Notice: Undefined index: current_action in
/home/del10000/domains/delphidunyasi.net/public_html/Sources/Subs.php on line
2391
Query'nin hızlanması için fonksiyonu optimize etmek gerekiyor. Eğer fonksiyonu gönderebilirsen daha fazla yardımcı olabiliriz.
Ynt: MSSQL Sorgulamada Hata Gönderen: SelçuK Tarih: 05 May 2008 13:06:30
Notice: Undefined index: current_action in
/home/del10000/domains/delphidunyasi.net/public_html/Sources/Subs.php on line
2391
Query'nin hızlanması için fonksiyonu optimize etmek gerekiyor. Eğer fonksiyonu gönderebilirsen daha fazla yardımcı olabiliriz.
Hocam functin da optimizasyona gerek olduğunu sanmıyorum. Nedenine gelince MYE şirketinin
usata SQL Coderları tarafından yazılmış bir function.
Aslında şimdi mesajı görünce yeniden bir soru sormak aklıma geldi.
Bu sorgu hızlanması yada yavaşlamas nedir. Genelde yaplan sorgu hataları nedir.
Sorgu optimize etmek nasıl yapılır. Hata nasıl tespit edilir.
Ynt: MSSQL Sorgulamada Hata Gönderen: Opt2000 Tarih: 06 May 2008 13:12:13
Notice: Undefined index: current_action in
/home/del10000/domains/delphidunyasi.net/public_html/Sources/Subs.php on line
2391
Selam,
Kullanılan veri tabanına bağlı olarak optimize işlemi değişir. Örneğin MySQL kullanıyorsanız yaş hesaplamak için Stored Function yerine, DLL dosyasına yazacağınız bir UDF (User Defined Function) çok daha hızlı çalışır, ama MySQL'e UDF eklemek zordur.
Bu sorgunun yavaş çalışmasının sebebi basit: Her satır için yaşı hesaplayacak sonra yaşa göre satırı seçip seçmeyeceğine karar verecek. Yani DB'de 1000 tane kayıt varsa (1000 çok küçük bir rakam) 1000 kere yaş hesaplayacak, sonra içinde belki 10 tanesini seçecek.
Veri tabanına göre değişmekle birlikte WHERE kısmı aşağıdaki gibi yazılırsa hızlanacaktır (MSSQL için)
DatePart(Year, GetCurrentDate()) - DatePart(Year, dog_tar) < 17 (18 olmaması gerekiyor ama emin değilim)
Sebebi de basit. DatePart native bir fonksiyon (bildiğim kadarıyla), ama Stored Procedure'lar öyle değil.
Sorguların hızlı olması için
1. Mümkün olduğu kadar indexli alanlardan join yapın
2. string alandan join yapacaksanız, string alan char[4] gibi bir şey olsun, daha fazlası yavaşlatır. char[4] aslında int'e denk gelir.
3. Mümkün olduğunca INNER JOIN kullanın.
4. Mümkün olduğunca Temp Table veya subquery kullanmayın. Bazı veri tabanları subquery ve temp table'lar için index kullanamaz.
5. Elbette sadece işinize yarayacak alanları seçin. Bunu yazmaya bile gerek yok.
6. DISTINCT yerine farklı çözümler üretin. DISTINCT çok yavaş çalışır. Farklı çözüm sorguya göre değişebilir bu arada.
7. Doğru index tanımlayın ve Query Analyser ile tanımladığınız indexlerin kullanıldığından emin olun. Tanımladığınız index kullanılmıyorsa veri tabanının query optimizer'ı optimize edemiyordur. Sizin force etmeniz gerekir (veri tabanına göre değişmekle birlikte FORCE INDEX gibi şeyler vardır)
Son olarak bunu Delphi kodlarında da kullanabilirsiniz. = yerine <> daima daha hızlı çalışır. Aklınızda bulunsun. Ama veri tabanı için
Cinsiyet = 'e' ile Cinsiyet <> 'k' aynı sonuca çıkmayabilir, çünkü Cinsiyet NULL ise birincide seçilmez, ama ikincide seçilir. Buna dikkat etmeyi unutmayın.
İlk akla gelenler bunlar.
Kolay gelsin,
Bahadır Alkaç