Firebird stored procedure ile sorgulama
Firebird stored procedure ile sorgulama
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...
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...
Re: Firebird stored procedure ile sorgulama
öncelikle edit dediğine göre store procedure den değil programlama dilinden yapmaya çalışıyorsun.
genel mantık şöyle
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.
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
......
......
biraz kasıntılı bir iş olabilir ama hız açısından daha iyi sonuç alacağını düşünüyorum.
Ahmet DENİZ
Re: Firebird stored procedure ile sorgulama
Normal sogrular ile SP ler arasında pek performans farkı yok bence sorgularını ve tablo yapılarını kontrol etmelisin.
Re: Firebird stored procedure ile sorgulama
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.
Re: Firebird stored procedure ile sorgulama
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
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
Re: Firebird stored procedure ile sorgulama
Merhaba;orhancc yazdı:Normal sogrular ile SP ler arasında pek performans farkı yok bence sorgularını ve tablo yapılarını kontrol etmelisin.
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?
Re: Firebird stored procedure ile sorgulama
Yukarda da yazdığım gibi benim şahsi kanım sürekli tüm işlevi veri tabanına yaptırmaktan yanadır.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?
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
Re: Firebird stored procedure ile sorgulama
@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.
Re: Firebird stored procedure ile sorgulama
AhmetNuri direk db ye bağlantı yerine araya web servisi yazarak tüm işlemleri oradan yapmak daha mantıklı.
Re: Firebird stored procedure ile sorgulama
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.orhancc yazdı:AhmetNuri direk db ye bağlantı yerine araya web servisi yazarak tüm işlemleri oradan yapmak daha mantıklı.
her yoğurdun ayrı bir baba yiyit yiyişi var:))) değilmi.
Ahmet DENİZ
Re: Firebird stored procedure ile sorgulama
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.
Re: Firebird stored procedure ile sorgulama
denemye değer ilk fırstta küçük çaplı bir test yapmayı düşünüyorum.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.
Ahmet DENİZ
Re: Firebird stored procedure ile sorgulama
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.
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.
Re: Firebird stored procedure ile sorgulama
Ç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.
Re: Firebird stored procedure ile sorgulama
Ş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
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