Ben daha büyük bir mysql tablo birden girmeye gerekir?

6 Cevap php

Ben trafik için maksimum performans için verdiği şeyler ile son birkaç yıldır deneme olmuştur ve ben çok şey öğrendim (dosyalarının yüksek trafik ve 100'ün) yaklaşık 2 yıldır üzerinde çalışma var oldukça büyük bir sosyal ağ tipi sitesi var. Şimdi ben tamamen yeniden kod benim sosyal ağ planlıyorum, büyük bir görev var bu yüzden yeniden tasarımı mysql DB ve her şeyim.

Aşağıda Ben yaklaşık bir sorum var bir çift mysql tabloları kadar yapılmış bir fotoğraf. Bir kullanıcı çok nadiren bir e-posta veya şifrenizi düzenleme sürece tekrar tabloyu vurmak gerekir siteye giriş yapınca Ben şu anda, giriş sürecinde kullanılan giriş tablo var. Ben o ikonların site için kullanıcılar ayarları ve profil verileri bir kullanıcı tablo var. Bu sorularım var burada, bu küçük tablolar halinde kullanıcı tablo bölmek için daha iyi performans olmalı mı? Eğer kullanıcı tablo görmek Örneğin ben sadece bir ayrı ayar tablo oluşturmak gerekir ben "setting_" olarak işaretlenmiş birkaç alanlarını göreceksiniz? Ben de alanlar Yani şeyler sadece toplam sayısını saklamak için başka bir tablo oluşturmanız gerekir vb toplam yorumların sayısı, fotoğrafın, arkadaşları, posta mesajları, olabilir "sayısı" ile işaretlenmiş?

Yerine ben 1 vurabilecek her sayfa yük hakkında bilgi almak için 3 tabloları vurma, ben mysql sorguları kısmak olabilir eğer daha iyi olurdu belki düşünüyordum çünkü ben artık 1 masanın üzerine hepsini var nedenidir.

Maalesef bu kafa karıştırıcı, ve herhangi bir ipucu için teşekkürler eğer.

alt text

6 Cevap

should I just create a seperate setting table?

So should I create another table to store just the total count of things?

Bunun için tek bir doğru cevap yoktur, bu uygulama yapıyor nasıl bağlıdır.

Ne yapabilirim bir dev ortamında sonuçları ölçmek ve tahmin etmektir.

Bir yandan, ayrı bir tablo kullanarak bazı yerden tasarruf edecek ve kod değiştirmek kolay olacaktır.

Öte yandan, size bazı performans kaybedebilirsiniz (ve zaten sanırım) farklı tablodan bilgi katılmak zorunda tarafından.

Sayısı hakkında ben her zaman bu şeyler bu tür hesaplamak için daha iyi olduğunu söyledi olmasına rağmen, orada olması iyi olduğunu düşünüyorum, ben bu duruma hiç de size zarar sanmıyorum.

Ama yine, sizin ve belirli bir uygulama daha iyi bilmek için tek yol, ölçme profilleme ve bunu yapmanın yararı ne bulmaktır. Muhtemelen sadece iyileşme% 2 kazanç olacaktır.

Sen onlara tüm satır çarpmak her zaman yazılır --- kendi tablosunda counter-sütunları ve sık sık güncellenen damgalarını koyarak düşünmelisiniz.

Aşağıdaki arasındaki performans testi sonuçlarını karşılaştırmak gerekir:

  1. Yalnız bırakmak
  2. Iki tablo içine kadar Breaking
  3. (Zaten bu işin yoksa) aynı tabloda tüm veriler ile giriş verilerinizi ve profil verileri almak için farklı sorgular kullanma

Kullanım verileri bu avantajlı olacağını göstermektedir Ayrıca, eğer profil verileri önbelleğe alma stratejisi çeşit uygulamak.

Ben sadece benim düşüncem, sütun sayısı içindeki kullanıcı tablo korkunç büyük düşünün olmaz. Eğer fazlalık çıkarılması için bir durumda bulabilirsiniz sürece ben de birden fazla tablo içine bu tabloyu kırmak olmaz. Belki aynı ayarlara sahip kullanıcılar bir şey var, o tabloyu patlak bir durumda olurdu.

Should take into account the average size of a single row, in order to find out if the retrieval is expensive. Also, should try to use indexes as while looking for data... The most important thing is to design properly, not just to split because "it looks large". Maybe the IP or IPs could go somewhere else... depends on the data saved there.

socialnetworksite bu verileri kullanarak da (yani sanırım) auth ve yetkilendirmesi süreçleri kolları gibi Ayrıca, giriş ve kullanıcı tablolar arasındaki ayrılık 'oturum açma verileri neden, iyi bir performans sunmalıdır "yeterince kısa" olduğu, profile erişim inmediately başarılı giriş yaptıktan sonra, sadece bir kez yapılabilir iken. Sadece DB performansını artırmak için doğru hile yapmak ve bitti.

(Onlardan bir koleksiyon olarak, bir varlık olarak onlara isim, varlıklar olarak tabloları görselleştirmek unutmayın)

Eğer birden fazla tablo içine tek bir tabloyu kırmak isteyip istemediğinize karar verirken dikkate almak isteyeceksiniz iki şeydir:

  1. MySQL küçük, tutarlı veri setleri seviyor. Onlar disk alanı potansiyel pahasına performans yardımcı olacaktır satır uzunlukları sabit böylece sizin tabloları yapı olabilir eğer. Ben ne söyleyebilirim yaygın olduğu bir şey sabit uzunlukta veri alma ve değişken uzunlukta veri başka bir yere gidecek iken kendi tablosunda koyuyor.

  2. Katılır katılarak değil daha az ölçülebilir çoğu durumda bulunmaktadır. Şu anda tablodaki verileri, normal, aynı anda tüm erişilebilir olacak olursa o zaman iki ekler yavaşlatan ve oldukça potansiyel okur olacak gibi o kadar bölme değer olmayabilir. Olarak erişilebilir almaz tablodaki bazı veriler varsa Ancak, genellikle o performans nedenleriyle tablonun dışına taşımak için iyi bir aday olurdu.

Bu sonraki deyimi kanıtlamak için çevrimiçi bir kaynak bulamıyor ama o fazla 8 tek bir sorgu (MySQL 5.0 katılır kez olsun MySQL iyileştirici sorunları var dedi Jay Pipes tarafından verilen bir MySQL Performans konuşma hatırlıyorum. * .) Ben katılır genellikle tek bir tablo üzerinden sorguları daha uzun sürer ne kadar doğru sihirli sayı olduğunu ama ne olursa olsun emin değilim.