Firebird stored procedure ile sorgulama

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
esrehmaan

Firebird stored procedure ile sorgulama

Mesaj gönderen esrehmaan »

Merhabalar,

ben yine takıldığım bir soru daha :( kullandığım veritabanı ise firebird 2.5.1

sormak isteiğim şey şu benim programımda 5 adet edit 1 adet combobox var. Yapmak isteiğim şey yazdığım alan ile ilgili arama yapmak.. örneğin ;

1 sadece ad edit dolu ise sadece ad editi ara
2 sadece soyad edit dolu ise sadece soyadedite göre ara
3ad ve soyad editlerine göre ara
4
5....vs diye gidiyor. nasıl bir yol izlemem gerek ve stored procedure ile yapmak istiyorum sebebi ise normal sorgular ile çok kasılma oluyor cünkü bahsettiğim veritabanı taklaşık 50 milyon kayıt barındırıyor ve 19 alan var ben bu alanların sadece 5 tanesini kullanıp arama yapacağım...

şimdiden teşekkürler...
AhmetNuri
Üye
Mesajlar: 260
Kayıt: 02 Tem 2007 07:55
Konum: ist
İletişim:

Re: Firebird stored procedure ile sorgulama

Mesaj gönderen AhmetNuri »

öncelikle edit dediğine göre store procedure den değil programlama dilinden yapmaya çalışıyorsun.
genel mantık şöyle

Kod: Tümünü seç

sql.add('selec adi, soyadi,....form vatandas where 1 = vatandas_id <> '' '  )// diğer sql lre and kullanmak için mutlaka garanti bir where ekliyorum
if editadi.text <>'' then begin
sql.add(' and adi like editadi.text')// sql de tırnakların yazımı farklı fakat şu anda onu tam yazamıcam forumdan edit de arama filan dersen buluesun

if editsoyadi.text <>'' then begin
sql.add(' and adi like editadi.text')// sql de tırnakların yazımı farklı fakat şu anda onu tam yazamıcam forumdan edit de arama filan dersen buluesun
......
......
Fakat tavsiyem biraz çalışıp bunu store procedure den yazman ve parametreleri dışarıdan alıp sonuçları ekrana yazman.
biraz kasıntılı bir iş olabilir ama hız açısından daha iyi sonuç alacağını düşünüyorum.
Ahmet DENİZ
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Firebird stored procedure ile sorgulama

Mesaj gönderen orhancc »

Normal sogrular ile SP ler arasında pek performans farkı yok bence sorgularını ve tablo yapılarını kontrol etmelisin.
esrehmaan

Re: Firebird stored procedure ile sorgulama

Mesaj gönderen esrehmaan »

hocam mesajlarınız için tşk ederim Ancak bana sp konusunda kod lazım sp nasıl oluşturacağım hakkında hiç bir bilgim yok maalesef.
AhmetNuri
Üye
Mesajlar: 260
Kayıt: 02 Tem 2007 07:55
Konum: ist
İletişim:

Re: Firebird stored procedure ile sorgulama

Mesaj gönderen AhmetNuri »

Bu da transection için bir örnek

http://www.delphiturkiye.com/forum/vie ... 9&t=28601
umarım işinizi halletmişsinizdir.
Normal kullandığınız sql i firebird için den de kullanabilirsiniz.
Döngü vb komutlarlada delphi den yaptığınız işlemleri yapabilirsiniz.
Store procedure ile bütün programınızı tasarlayıp programlama dilini sadece arayüz hazırlamak için kullanabilirsiniz. bu programınızı farklı platformalara taşımanızı kolaylaştırır. Mesela yazdığınız kodu php ile internete taşıyabilirsiniz. yada networkten zayıf bir bilgisayardan sorgu gönderebilirsiniz. sadece ana makinenin iyi özelliklerde olması sizin için yeterli olacaktır. Her durumda sql işlemede kullanım sırası aşağıdagi gibi olmalıdır.

Firebird in kendi Sql komutları
Udf ile hazırlana komutlar
Store procedureler
Dışarden çekilen Sql ler
Ahmet DENİZ
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Firebird stored procedure ile sorgulama

Mesaj gönderen NewMember »

orhancc yazdı:Normal sogrular ile SP ler arasında pek performans farkı yok bence sorgularını ve tablo yapılarını kontrol etmelisin.
Merhaba;
Bende bu tür karmaşık ve şartlı sorgularımı daha kolay olduğu için program tarafında yaptırıyorum.Bunu stored procedure ile yapmak biraz kastırır çünkü.(yani kodu hazırlarken kastırır).Ama hep merak etmişimdir.acaba bunu stored procedure ile yapsam ne kadar hızlanır diye.Bu söylediğiniz konusunda bir test yaptınız mı yada stored procedure ile uğraşmaya değecek kadar hız farkı oluyormu diye sorsam?
AhmetNuri
Üye
Mesajlar: 260
Kayıt: 02 Tem 2007 07:55
Konum: ist
İletişim:

Re: Firebird stored procedure ile sorgulama

Mesaj gönderen AhmetNuri »

NewMember yazdı:
Merhaba;
Bende bu tür karmaşık ve şartlı sorgularımı daha kolay olduğu için program tarafında yaptırıyorum.Bunu stored procedure ile yapmak biraz kastırır çünkü.(yani kodu hazırlarken kastırır).Ama hep merak etmişimdir.acaba bunu stored procedure ile yapsam ne kadar hızlanır diye.Bu söylediğiniz konusunda bir test yaptınız mı yada stored procedure ile uğraşmaya değecek kadar hız farkı oluyormu diye sorsam?
Yukarda da yazdığım gibi benim şahsi kanım sürekli tüm işlevi veri tabanına yaptırmaktan yanadır.
biraz kastıracağı doğrudur fakat inanın ilerliyen zamanlarda kasmaya da alışıyorsunuz ve çok fazla faydasını görüyorsunuz.
Aynı sql cümlesini store procedure ile çekmek ve normal çekmek arasında bir hız kıyaslaması yapmadım. ama çok merak ediyorsanız kendinizde kçük bir sistemde 100.000 random data ile kıyaslama yapabilirsiniz.
Store procedure fayadaları
1) Kodları başka platforma (Web, mobile aygıtlar v.b.)taşımak isterseniz sadece arayüz hazırlamak la uğraşırsınız kalan kısmı aynenen kullanılabilir.
2) Server client çalışmalarda sadece ana makine güçlü olması gerekir. Client cep telefonu taplet v.b olsa bile kolaylıkla sorgu alabilirsiniz.
3) Aynı kodu tekrar tekrar yazmak zorunda kamasınız.
Zaten ilerde yaza yaza store procedure yazmaya alışırsınız.
Ahmet DENİZ
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Firebird stored procedure ile sorgulama

Mesaj gönderen orhancc »

@NewMember ben bu konuda bir sürü araştırma yaptım ve günümüz bilgisayarlarında performans farkının çok fazla olmadığını gördüm ve bunun haricinde hata ayıklama sp kısımlarında programcıyı daha fazla uğraştırıyor. Ben artık işlerimi ORM aracılığı ile yapıyorum C# da mesela tüm işlemleri Entity Framework üzerinden yapıyorum ve program yazmayı epey hızlandırıyor, db kısımları ile uğraşmak yerine asıl kodlama işlerine yoğunlaşabiliyorsun.
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Firebird stored procedure ile sorgulama

Mesaj gönderen orhancc »

AhmetNuri direk db ye bağlantı yerine araya web servisi yazarak tüm işlemleri oradan yapmak daha mantıklı.
AhmetNuri
Üye
Mesajlar: 260
Kayıt: 02 Tem 2007 07:55
Konum: ist
İletişim:

Re: Firebird stored procedure ile sorgulama

Mesaj gönderen AhmetNuri »

orhancc yazdı:AhmetNuri direk db ye bağlantı yerine araya web servisi yazarak tüm işlemleri oradan yapmak daha mantıklı.
evet program yazma süresi oldukça kısalıyor fakat program çalışma hızı konusunda aynı şeyi diyemiyorum. birde alışkanlık meselesi.
her yoğurdun ayrı bir baba yiyit yiyişi var:))) değilmi.
Ahmet DENİZ
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Firebird stored procedure ile sorgulama

Mesaj gönderen orhancc »

Programcıların alışkanlıklarını teknolojiye göre değiştirmesi gerekiyor. Programın çalışma hızında aynı şeyi söyleyemem çünkü yeterince hızlı çalışıyor ve daha az hata yapmaya müsait.
AhmetNuri
Üye
Mesajlar: 260
Kayıt: 02 Tem 2007 07:55
Konum: ist
İletişim:

Re: Firebird stored procedure ile sorgulama

Mesaj gönderen AhmetNuri »

orhancc yazdı:Programcıların alışkanlıklarını teknolojiye göre değiştirmesi gerekiyor. Programın çalışma hızında aynı şeyi söyleyemem çünkü yeterince hızlı çalışıyor ve daha az hata yapmaya müsait.
denemye değer ilk fırstta küçük çaplı bir test yapmayı düşünüyorum.
Ahmet DENİZ
meron06
Üye
Mesajlar: 393
Kayıt: 15 Eki 2005 04:23

Re: Firebird stored procedure ile sorgulama

Mesaj gönderen meron06 »

bir kaç şeyde ben karalayayım.;
stored procedure ile sql sorguları arasında çok aman aman bi performans farkı olmaz.
bi ara stored procedure lerin artıları eksileri ile ilgili forumda bi arkdaşın yazısı vardı bence onu bi okkuyun.
Yazmış olduğun sql sorgusu doğru bi sql se 50 milyon kayıtta öyle bi kasılma yapmaz bence.çok fazla kaydın olduğu veri tabanlarında çalıştım.sql sorgularında yapılan ufak gibi görünen değişiklikler inanılmaz sonuçlarına defalarca şahit oldum.
bu gibi durumlarda dikkat edilecek aklıma gelen konular şunlar.ben bunlara dikkat ediyorum;
1-Tablo daki indexler doğru olarak oluşturulmuşmu.
2-örn.editin onchange ine sql sorgusu yazanlar oluyor mesela bu gibi yapılar kullanılmamalı.
3-örn.tabloda turkodu diye bi alanımız olsun turkodu<>1 gibi sorgulardan kaçının.turkodu in(2,3,4) gibi kulanmak <> den daha performanslı olur.

birde şöyle bi tecrübe den bahsedeyim.daha önce yazdığımız bir projede stored procedure çok fazla kullandık.veri tabanında 300 civarında sp vardı.belli bi zaman sonra güncellemelerde bu sp lerin güncellenmesi takibi inanılmaz zorlaşmıştı.
ben sp leri genelde birden fazla iş yapacaksam kullanıyorum.bazen öyle sorgular kullanıyorum ki bi sorguyu yazmak yarım günümü alıyor.ama o sorgu 3-5 sn de yapmak istediğim işi yapıyor.
anemos
Üye
Mesajlar: 110
Kayıt: 02 Nis 2007 07:51
Konum: Sakarya / Hendek

Re: Firebird stored procedure ile sorgulama

Mesaj gönderen anemos »

Çalışmalarımda hız açısından bir select hızı sp den çok az bir farkla daha iyi. Ancak cursor kullanımına ihtiyacınız varsa bunu sp ile değil, "execute block" deyimi ile yapın. Bunun hızı select hızıyla eşittir. Üstelik execute block, esnek bir sp gibidir; güncelleştirmesi kolaydır.
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Firebird stored procedure ile sorgulama

Mesaj gönderen orhancc »

Şunlari bir okuyun

Jeff Atwood StackOverflowun kurucusu çok iyi programcıdır
http://www.codinghorror.com/blog/2004/1 ... yways.html

http://avishkarm.blogspot.com/2010/01/p ... dures.html
Cevapla