MySQL saklı yordam vs karmaşık bir sorgu

5 Cevap php

Nasıl Bir saklı yordam performans? Bunları kullanarak yerine bir PHP / MySQL çağrısı karmaşık bir sorgu uygulamaya değer mi?

5 Cevap

Saklı yordamlar Size küçük bir performans artışı verecek, ama çoğunlukla basit bir sorgu ile yapmak zor veya imkansız olan görevleri yapmak için vardır. Saklı yordamlar müşterilerine birçok farklı türleri için veri erişimi basitleştirmek için mükemmeldir. Onlar geliştirici için bu ayrıntıları bırakarak aksine veritabanı nasıl kullanıldığını denetlemek için veritabanı yöneticileri onları seviyorum.

Daha iyi performans elde etmek için indeksler ve uygun tablo tasarım için sabırsızlanıyoruz.

Eyvah ben bu cevapları okudum ve yanlış bir izlenim almak için kimse için nefret ediyorum. "SQL server / Oracle" vs "MySQL" on "Saklanan ne olursa olsun" uygulamaları arasında bazı çok önemli farklar vardır.

Bkz: http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/

Every person that asks this question assumes something about MySQL’s stored procedure implementation; they incorrectly believe that stored procedures are compiled and stored in a global stored procedure cache, similar to the stored procedure cache in Microsoft SQL Server[1] or Oracle[2].

Bu yanlış. Düz-out yanlış.

Here is the truth: Every single connection to the MySQL server maintains it’s own stored procedure cache.

Makale ve yorumların geri kalanını okumak için bir dakikanızı ayırın. Bu kısa ve sen konuların çok daha iyi bir anlayışa sahip olacak.

Gibi JohnFX bir önceki cevabı nezaket bana işaret edildi:

"The performance benefit of stored procedures is dubious and minimal at best. Some reading material on this point:

http://statestreetgang.net/post/2008/04/My-Statement-on-Stored-Procedures.aspx

http://betav.com/blog/billva/2006/05/are_stored_procedures_faster_t.html

Keyfini çıkarın.

Grossly simplified - Stored procedure performance is equal to or marginally better than code at the cost of db server load. Since most db systems are concerned with multi-user access and are using commodity hardware for the db server, using code offloading the db server will probably win overall. With high end DB servers, > 4 cores, > 32gb ram, SP load is often not an issue.

Saklı yordamlar;

  1. Sorguda daha az veri transferi - iyi yazılmış bir kod için minimum hız artışı
  2. ayrıştırma ve önbelleğe alma "biraz daha iyi" - iyi yazılmış bir kod için minimum hız iyileştirme
  3. potansiyel olarak birçok sistemleri üzerinden yükü yaymak, müşteri (ler) (web sunucuları) vs db sunucuya yürütme yük taşımak. - Hız geliştirmeleri transfer "aşırı" verileri dahil verilerin gerçek kodu ve miktarına çok bağlıdır. Daha kod transferleri fazla veri biraz aslında kullanılır (db kütüphaneler, kötü yazılmış sorgular, select *, vb)

Erken optimize etmeyin.

Saklı yordamlar, hız, güvenlik listesinde yüksek olmak dışında diğer birçok faydaları vardır.

SP ve kod, vb - tek bir programcı bir ortamda, yararları SP programlama öğrenme eğrisi, SP test çerçevesinde, revizyon kontrolü birden çok yöntem ile telafi edilebilir.

Öğrenme ve bir test kullanarak ve çerçeve profil kesinlikle bu cevap verecektir ve sadece SP veya ad-hoc sorguları seçerek daha app daha iyi "performans" sağlama konusunda size rehberlik edecektir.

"Buna değer" Cevap - Eğer sadece tahmin olacağım yerde çerçeve profilleme / bir test yoksa. Benim kod ve donanım dayalı herhangi bir cevap sizinki muhtemelen alakasız.

DB'ın (Sybase, Oracle, MS SQL, MySQL, Postgres) saklı procs kullanarak birçok Perl / TCL / PHP / C web uygulamaları benim gerçek dünya deneyimi büyük ölçüde her yerinden performansını artırmak ETMEYİN. Ama ben yine de sadece performans dışındaki nedenlerle, sık sık onları kullanmak. Bunlar büyük ölçüde, belirli bir karmaşık bir sorgu artırabilir, ama bu nadiren kodu ve genel işlem süresi toplu bulunuyor.

Bu zaten derlenmiş çünkü MySQL veya MSSQL veya Oracle gibi diğer SQL sunucusu, saklanan prosedürler dramatik ilgili sorguların hızını artırmak. Saklı yordamlar doğrudan sorguları daha güvenli ve veritabanındaki nesne olarak her kullanıcı için doğru erişim sağlayarak, sahibi tarafından uygulanabilir.

Ayrıca sorgular ve prosedürlerin mantığını gizlemek ve geliştirme ekibi ve diğer programcılar bir "kara kutu" wich onlar sonuçlar params'ı eklemek ve almak için verebileceğiniz saklanan prosedürleri kullanma.

Kesin saklanan prosedürleri sallamak!!

From MySQL 5.1 Documentation: Stored routines can be particularly useful in certain situations:

Birden fazla istemci uygulamaları, farklı dillerde, farklı platformlardaki çalışmaları yazılı, ama aynı veritabanı işlemleri gerçekleştirmek için gereken zaman.

Güvenlik yüksek olduğunda. Bankalar, örneğin, tüm ortak operasyonları için saklı prosedürler ve işlevlerini kullanın. Bu tutarlı ve güvenli bir ortam sağlar, ve rutinleri her işlem düzgün kaydediliyor sağlayabilirsiniz. Böyle bir kurulum, uygulamalar ve kullanıcıların doğrudan veritabanı tabloları erişimi yok olurdu, ama sadece belirli saklanan rutinleri yürütebilirsiniz.

Daha az bilgi sunucu ve istemci arasında gönderilen gerektiğinden saklanan rutinleri gelişmiş performans sağlayabilir. Tradeoff işin daha sunucu tarafında yapılır ve daha az istemci (uygulama) tarafında yapılır çünkü bu veritabanı sunucusunda yükü artış olmasıdır. (Web sunucuları gibi) birçok istemci makineleri sadece bir veya bir kaç veritabanı sunucuları tarafından hizmet veriliyorsa, bu düşünün.

Saklanan rutinleri da veritabanı sunucusu fonksiyonları kütüphaneleri için izin verir. Bu (örneğin, sınıfları kullanarak) dahili gibi tasarım izin modern uygulama dilleri tarafından paylaşılan bir özelliktir. Bu istemci uygulaması dil özelliklerini kullanırken bile veritabanı kullanımının kapsamı dışında programcı için faydalıdır.