MySQL ile normalleşme ya da alternatif

2 Cevap php

kullanıcılar hakkında özellikleri bir sürü saklamak gerekiyor PHP ve MySQL kullanarak bir site inşa (örneğin kendi DOB, boy, ağırlık, vb) (tek tablo, özellikleri çok (neredeyse tüm) gereklidir) oldukça basittir.

Ancak, sistem aynı zamanda bütün olarak bir düzine gibi özellikleri onların böyle vs onların konuşulan dillerde, enstrümantal yetenekleri gibi, diğer bilgileri saklamak gerekiyor. Varsayılan olarak ben (diller belki denir) ayrı bir tablo oluştururken kabul ve sonra kompozit kimliği (User_id, Dil_Kimliği) ile bir bağlantı tablo.

Ziyaretçiler bu ölçütleri kullanarak kullanıcılar için arama denediğimde olsa öngörüyoruz sorundur. Biz kullanmak arıyorsanız kümesi arama ve kullanıcıları rafine edilecek lansmanı ve birincil işlevi sırasında 15.000 'den fazla kullanıcıya sahip olacaktır. Yani günlük sorguları yüzlerce ve bir düzine veya daha fazla çekici değil onları Joın kadar sorguları kullanarak umudu anlamına gelmektedir.

Yani benim soru, daha verimli olacak bir alternatif var mı? Ben düşünüyordum tek yolu, kullanıcı tabloda kimlikleri bir CSV olarak M2M değerleri saklamak ve daha sonra buna karşı bir GİBİ sorgu çalışıyor. Ben GİBİ iyi değil, ama katılmak daha iyidir biliyor musun?

Olası çözümler çok takdir edilecektir.

2 Cevap

Birleştirmeler ile yapın. Sonra, performans hedefleri yerine getirilmediği takdirde, başka bir şey deneyin.

Emin veri temiz ve mantıksal temsil edilir hale getirmek için (bir eşleme tablo tarafından kullanıcılara masaya bağlı örneğin dilleri tablo) bir normalized veritabanı ile başlayın.

Eğer performans sorunları varsa, sorguları incelemek ve emin uygun indexes var olun.

Eğer art arda birçok birleştirmeler ile sorguları kodlama sevmediğim, bazı views tanımlar.

Views sorgulamak çok yavaş ise, materialized views düşünün.

Eğer birkaç bin kayıtları ve günde bir kaç yüz sorgular (gerçekten, oldukça küçük ve düşük kullanım var) varsa, bu teknikler sitenizin veri bütünlüğü üzerinde hiçbir ödün vermeden, tam hızda çalıştırmak için izin verecektir. Eğer kayıtları ve günde sorguları milyonlarca milyonlarca büyütülebilir gerekiyorsa, hatta bu teknikler yeterli olmayabilir; Bu durumda, cacheing araştırmak ve denormalization.