Soru MySQL'de Görünümleri Kullanmanın Avantajı


Görüntülemelerin, birden fazla tablodan toplanan verileri toplayan özel "tablo görünümleri" oluşturmak için kullanılabileceğini öğrendim.

Sorum şu: görüşlerin avantajları nelerdir? Spesifik olarak, iki tablom var diyelim:

event | eid, typeid, name
eventtype | typeid, max_team_members

Şimdi bir görünüm oluşturuyorum:

eventdetails | event.eid, event.name, eventtype.max_team_members 
             | where event.typeid=eventtype.typeid

Şimdi bir takım için azami sayıda üyeye izin vermek istersem event, Yapabilirdim:

  • görünümü kullan
  • birleştirme sorgusu yapın (veya belki saklı bir yordam).

Her yöntemde benim avantajlarım / dezavantajlarım neler olabilir?

Başka bir sorgu: tablo olaylarındaki ve olay türlerindeki veriler güncellenirse, verilerdeki verileri güncellemede yer alan herhangi bir ek yük var mı (sonuçta elde edilen verileri önbelleğe alarak)?


21
2018-01-13 07:02


Menşei




Cevaplar:


Bir görünüm ayrı ayrı depolanmaz: bir görünümü sorguladığınızda görünüm bu görünümün tanımıyla değiştirilir. Böylece tablodaki verilere yapılan değişiklikler, hemen görünüm üzerinden görünecektir.

Daha önce işaret edilen güvenlik özelliğine ek olarak:

Bu birleştirme işlemini gerçekleştirecek çok sayıda sorgu yazıyorsanız, bu SQL kodunu belirler. Birkaç yerde kullanılan bir işlevde bazı işlemler yapmak gibi, kodunuzu daha kolay okuma / yazma / hata ayıklama yapabilir.

Ayrıca, birleştirmenin gelecekte nasıl gerçekleştirileceğini tek bir yerde değiştirmenize izin verir. Belki de bire-bir ilişki, bire-bir ilişki haline gelebilir ve birleştirilmiş ek bir tablo ekleyebilir. Ya da her olay kaydındaki tüm olay türü alanlarını denormalize etmeye ve dahil etmeye karar verebilirsiniz, böylece her seferinde katılmak zorunda kalmazsınız (sorgu yürütme süresi için alan).

Daha sonra tabloları daha sonra bölebilirsiniz, 3 yönlü bir birleştirmeye dönüştürebilir ve görünümü kullanan diğer sorguların yeniden yazılması gerekmez.

Tablolara yeni sütunlar ekleyebilir ve yeni sütunları dışarıda bırakacak şekilde görünümü değiştirebilirsiniz, böylece "select *" kullanan bazı eski sorgular tablo tanımlarını değiştirdiğinizde kırılmaz.


17
2018-01-13 07:16



"Bir görünüm ayrı ayrı depolanmaz" - mysql, görüntü içeriklerinin önbelleğe alınmasını gerçekleştirmez mi? - jrharshath
Bazı diğer veritabanı motorları, görünümden seçim sonuçlarının önbelleğe alındığı, ancak MySQL'in desteklenmediği "gerçekleştirilmiş görünümleri" destekler. Burada materyalize görünümler hakkındaki yoruma bakın: dev.mysql.com/doc/refman/5.5/en/create-view.html - Harold L
MySQL'in bir sorgu önbelleği vardır, bu yüzden sorgunuz tam olarak aynıysa (ör. "Myview from myview;"), önbelleğe alınmış sonuçları alabilirsiniz. - Ken
Performans açısından, istemci tarafı birleşimlerden daha hızlı görünümler var mı? - dashmug
Aslında, bazen daha yavaşlar. Bunun nedeni, belirli türdeki görünümleri kullandığınızda ara tabloların, dış tarafa neden olan indeksler olmadan yapılmasıdır. SELECT ifadeleri daha yavaş çalışır. Hakkında okuyun TEMPTABLE algoritma - Lee Avital


Kullanıcıları temel tablo (lar) yerine görünümle kısıtlayabilir, böylece güvenliği artırabilirsiniz.


13
2018-01-13 07:07