Belki de soruyu tersine çevirmek ve sadece saklı yordamların yapabileceği, elde etmek istediğiniz kullanımları bulmak mantıklıdır . Belki de saklı prosedürlerin öne çıktığı gerçekten kullanım durumları vardır.
Bir fark yaratırsa, MSSQL ve Entity Framework kullanıyorum.
EF hakkındaki bilgim sınırlıdır, ancak görebildiğim kadarıyla EF ( sadece ) diğerleri gibi bir ORM'dir; ve neyse kullanma yeteneğine sahiptir ham SQL .
İki önemli noktanızı alırsam:
Çalışması birkaç dakika süren karmaşık bir rapor (bu bir web uygulamasındaki bir sayfaydı). Ben LINQ sağladığı ne çok daha verimli (çalıştırmak için sadece birkaç saniye sürüyor) SQL yazabilir bulundu.
Rapor yaparken LINQ / EF azalıyordu. Ve fark ettiğiniz gibi SQL
, bir ORM kullanmaktan çok daha hızlıydı. Ancak bunu saklı yordamlar lehine mi yoksa sadece her şey için ORM kullanmaya karşı mı konuşuyor ?
Sorununuz SQL ile açıkça çözülebilir . Bu sorgu depolanmışsa ve kod tabanınızda sürüm denetimli ise - örneğinize göre - en azından bir fark yaratmaz .
Bir web uygulamasının, uygulama ile ilgisi olmayan diğer birçok hassas bilgiyi içeren ayrı bir veritabanındaki birkaç tabloyu okuması ve yazması gerekiyordu. Her şeye erişim vermek yerine, sadece gerekli olanı yapan ve sadece sınırlı bilgi veren saklı bir prosedür kullandım. Web uygulamasına daha sonra herhangi bir tabloya vb. Erişim olmadan yalnızca bu saklı yordama erişim verilebilir.
Burada aynı şey: basit bir bağlantı dizesi ve ve GÜNCELLEME ve sorun yapılır. Bu problem bir ORM ile bile çözülebilir :
sadece diğer DB'nin önünde bir web hizmeti kullanın ve aynı bölümlendirme / izolasyon elde edilir.
Yani burada görülecek bir şey yok.
Diğerlerinin yaptığı bazı noktalara bakıldığında:
EF özelliklerini kullanarak bir işlemde kolayca paketlenemeyen, belki de birçok tablo içeren karmaşık iş birimleriniz var.
Ama SQL
bunu yapabilir. Hiçbir sihirli burada içeriyordu.
Veritabanınız EF ile iyi oynamıyor
Tekrar: Uygun olduğunda EF kullanın .
Bağlı sunucularla sunucu sınırlarını aşan verilerle çalışmanız gerekir
Saklı yordamların nasıl yardımcı olduğunu görmüyorum. Bu yüzden saklı yordamların bir avantajını göremiyorum ; ama belki birisi buna ışık tutuyor.
Yeterli performans sağlamak için "çıplak metal" SQL'in gerekli olduğu çok karmaşık veri alma senaryolarınız var
Tekrar: " EF sınırları ".
Uygulamanızın bir tabloda tam CRUD izinleri yok, ancak uygulamanızın sunucunuzun güvendiği bir güvenlik bağlamında çalışmasına izin verilebilir
Tamam. Ben gitmek belki .
Şimdiye kadar sadece yarım puan saklı prosedürler lehine yapılmıştır.
Belki de saklı yordamlar lehine konuşan performans hususları vardır.
1) Sorguların saklanması , karmaşıklığı kapsayan saklı yordama basit bir çağrı yapma avantajına sahiptir . Sorgu planlayıcı sorguyu bildiğinden, optimize etmek "daha kolay". Ancak tasarruflar şu anki karmaşık sorgu planlayıcısı _minimal ile.
Bunun da ötesinde, geçici sorguları kullanırken küçük bir maliyet olsa bile, verileriniz iyi yapılandırılmış ve dikkatli bir şekilde dizine eklenmişse, veritabanı yalnızca uygulamanızın darboğazıdır . Yani küçük bir delta olsa bile, diğer faktörler göz önüne alındığında ihmal edilebilir.
2) Bununla birlikte, karmaşık sorguların bir DB'de depolandığı ileri sürülmüştür. Dikkate alınması gereken iki şey vardır:
a) Karmaşık sorgular, diğer her sorgu için şaşırtıcı süreleri artıran DB altyapısını büyük ölçüde kullanır. Paralel olarak çok sayıda maliyetli sorgu çalıştıramazsınız . Bu, ne pro ne de kontra prosedürler hakkında değil, karmaşık sorgulara karşı konuşuyor .
b) Sorgu yine de zaman alıyorsa, saklı bir yordamın neden küçük hız kazançları ile uğraştığını.
tl; Dr.
Hiçbir şey doğrudan saklı yordamlara karşı konuşmaz . Bu nedenle, saklı yordamları kullanmak iyidir - sizi mutlu ediyorsa.
Ancak öte yandan: Kesin olarak pro konuşan düzgün bir kullanım durumu hayal edemedim .
Saklı yordamları ne zaman kullanmalıyım?
Doğru cevap: İstediğiniz zaman . Ancak başka seçenekler de var.