MySQL baş ağrısı, ben yoksa ben mi gerekir?

3 Cevap php

I have a classifieds website. I am using SOLR for indexing and storing data. Then I also have a MySQL db with some more information about the classified which I dont store or index.

Şimdi, 4 tablolar ile oldukça normalize db var.

Whenever ads are searched on the website, SOLR does the searching and returns an array of ID_numbers which will then be used to query mysql. So solr returns id:s, which are then used to get all ads from the mysql db with THOSE id:s.

Şimdi, bütün JOIN ve benim tablolar arasındaki ilişkiler başımı ağrıtıyor.

Ben bir normalize db olması için idamesinde-kolaylığı dışında ne alabilirim?

Ben biliyorum ki, yaklaşık 50 sütunlu bir tabloya tüm bilgi depolamak.

Peki yerine bir reklam bulma ve görüntüleme için bu:

SELECT 
  category_option.option_name,
  option_values.value 
FROM classified, category_option, option_values 
WHERE classified.classified_id=?id 
AND classified.cat_id=category_options.cat_id 
AND option_values.option_id=category_options.option_id

Ben bu kullanabilirsiniz:

SELECT * FROM table_name WHERE classified_id = $classified_id

Isn't the last one actually faster? Or does a normalized db permform faster?

Teşekkürler

3 Cevap

Ben sizin durumunuzda denormalizing karşı tavsiye ediyorum. Onları daha fazla kullanmak ve kafanın içinde netleşecek başlar ve bakım kolaylığı gelecek için iyi bir fayda olarak katılır ile daha iyi alırsınız.

Here 'oldukça iyi bir normalleşme bağlantı (ve denormalizasyon) sa. Denormalizasyon yaklaşık Here 'nin bir sorudur. Bir cevap ihtiyacınız verileri almak için katılır kullanarak bir görünüm oluştururken, ve SELECT * FROM table_name WHERE classified_id = $classified_id sorgu gibi o kullanarak önerir. A normalize DB büyük olasılıkla daha yavaş olacaktır, ama bu o nedenle denormalize isteyeceksiniz düşüktür. Bu bazı yardım sağlar umuyoruz.

Eğer denormalizasyon yapmak her zaman aynı değeri birçok kez yazmak zorunda çünkü genellikle, okuma hız kazanmak ve yazma hızını kaybeder. Ayrıca, ekstra bakım veri bütünlüğünü korumak için önlemler alınmalıdır.

  • Sorgu kaç kez idam edilecek?
  • Bu yüksek trafik uygulaması mı?
  • Eğer bir önbellek ekleyebilir miyim?

Bir JOIN kullanarak sorgu önemsiz olduğu kadar MySQL katılır olarak endişe duyuyorlar. Ben bu denormalize gerek bakın.

Ben ancak okumak için böyle bir PİDE olmak değil yeniden öneririm:

SELECT 
  category_option.option_name,
  option_values.value 
FROM classified
JOIN category_option USING (cat_id)
JOIN option_values USING (option_id)
WHERE classified.classified_id = ?