Saklı yordam vs hazırlanan Bildirimi

7 Cevap php

Eğer php5 ve MySQL5 kullanıyorsanız, hazırlanan tablolar üzerinde depolanan procs kullanarak önemli bir avantajı var? (I MySQL5 saklı proc önemli performans kazançları alamayabilirsiniz yerde okumak)

7 Cevap

Onlar gerçekten aynı şey değildir - saklanan prosedürleri ile, veritabanı mantığı veritabanı içinde bulunur. Birden çok kez olarak adlandırılan hazırlanan tablolar temelde yeniden ayrıştırma sorguları önlemek - performans yararı büyük ölçüde değişebilir.

Birini veya başka kullanmak için seçim sizin özel durumunuza gerçekten bağlıdır. Ben bir yerde benim mantık bütün olması gibi ben gerçekten artık saklı procs kullanmayın.

Saklı prosedürleri profesyonel sınıf (IE kurumsal sınıf) uygulamaları için mantıklı nereye:

  1. Veritabanı mühendis performans için sorguları optimize etmek için izin istiyor
  2. Basit API sorgular soyut karmaşıklığı istiyorum
  3. Veritabanında ne bazı diğer partiler maruz istemiyorum fikri olabilir, çünkü mantık dağıtılan İSTİYORUM
  4. Bu dağıtılmış, n-katmanlı bilgisayar doğası, çünkü mantık dağıtılan İSTİYORUM
  5. Eğer veritabanı mühendis veya DBA (API bulunuyor sağlayarak sayesinde, depolanan kaçırmamasını soyutlama katmanı sağlar) uygulama kodunu değiştirmeden şemasını değiştirmek isteyebilirsiniz

Başka nedenleri vardır.

Hazırlanan tablolar bir oturumunda yaptığı iş için daha iyidir. Bir hazır deyimi oluşturmak için zaman ayırdığınız Ama eğer, aslında bir saklı yordam oluşturmak için gerekli her şeyi yaptık. Fark saklı yordam (veritabanındaki HİBE tabi) çoklu oturum kullanılabilir olmasıdır.

Ne ben çözemiyorum saklı proc vs hazırlanmış deyimi için bir seçenek varsa, neden hazırlanmış tablolar ile rahatsız olduğunu ifade etti. PS tartışmalar vs SP çoğu farklılıkları, diğer vs birini kullanmak için neden aralarında değil, ne odaklanmak gibi görünüyor. Bu her zaman aşağı kaynatın görünür "yapmaya çalışıyorsun ne bağlıdır." Ama bir iyi organize açıklama görmedim: Eğer gerekiyorsa VS bir deyimi kullanmak gerekiyorsa bir proc kullanın ....

Saklanan prosedürleri bazı avantajları:

  • Diller arasında taşınabilir
  • Arguably simplified interface and sometimes performance gains for complex queries and especially multi-query transactions (test!)
  • By exposing an interface rather than tables, can be used to improve security and integrity

Saklanan prosedürleri bazı dezavantajları:

  • Puts business logic into the database - complicates design, extra place to track for version control and troubleshooting
  • Performance losses in some situations (test!)
  • Veritabanları arasında daha az taşınabilir

Duruma göre artıları ve eksileri vardır, çünkü ben bir tek genelleştirilmiş cevabı bu soru için varolduğunu sanmıyorum. Basitlik, KURU, test ve erken optimizasyon kaçınma gibi prensipleri takip ederseniz, size para cezası sona olasıdır.

Durumda ya da burada söz etmek faydalı olabilir, ancak saklı prosedürler aynı zamanda dil agnostik konum durumda "taşınabilir" değil olabilir. Eğer PHP ile olduğu gibi Java, diyelim ki, içinde kendi veritabanında aynı saklı yordamlar çağırabilir. Prosedürler veritabanında bulunması nedeniyle, veritabanına erişimi olan herhangi bir şey, onlara aynı şekilde sorgulayabilirsiniz.

Ben saklanan prosedürleri fikrini sevmiyorum söyleyerek başlayacak, ben oldukça hazırlanan tablolar yol gitmek '. Bu durumda ben tam doldurmak için orada ikisi farklı fonksiyonlar ... Ayrıca portakal ile elma karşılaştırarak düşünüyorum ....

Uygulaması sadece o db bazı mantık olması mantıklı geliyor sürülen 95% veritabanı ise sadece saklı yordamı dikkate alacaktır.

Saklanan prosedürleri önemli avantajı, mantık ona uygulanabilir önce veri (bu durumda PHP / MySQL tabakası olurdu) bir tabaka çapraz olmamasıdır. Bazı sorgular yavaş MySQL içinde daha PHP aracılığıyla yapılır birkaç seçmek ifadeleri, gerektirebilir.

tobyhede işaret ettiği gibi, şimdi, tek bir yerde tüm mantığı olması iyidir. Ama PHP kullanarak gerekli verileri sorgulamak için sadece gerçekçi oldu projelerde çalıştım; Bir saklı yordam aracılığıyla yapılması gerekiyordu.

Php ile tanıdık, ama genel olarak saklanan prosedürleri değil zaten bir sql deyimi üzerinde marjinal daha hızlı performans üretebilir "derlenmiş" vardır.

Benim tercihi genellikle kod yönetim / dağıtım ve birim test perspektiften SQL ile sopa olsa.