2011-04-25 60 views
0

我有這個數據庫,用所謂的「徽章」和「主體」的表,我在「主題」標誌字段名爲「is_canceled」布爾值,現在有些人之所以建議我有所謂的「canceled_subject_count」,「徽章」的字段,它具有相同的值數據庫設計,最佳實踐,需要諮詢

"SELECT SUM(is_canceled) as cancel_count FROM subjects WHERE is_canceled = 1 AND badge_id = ".$some_badge_id 

的,他說的是性能,最好是取值直線,而讓它先求和的原因之一

你們覺得怎麼樣?我應該擁有這個領域嗎?爲什麼?

感謝

回答

5

這就是所謂的denormalization。這樣做的初始數據庫設計可能以後節省您的時間和精力,但有可能是過早的優化。你可能更好而不是添加canceled_subject_count字段,如果在一些分析後,你發現一個測量的性能瓶頸,當計算一個徽章的取消主題,那麼你可以添加該字段。

+0

+1。很好的回答:) – 2011-04-25 04:50:33

0

這真的取決於軟件的使用。這種優化取決於如何往往價值的變化,有多少人在看呢,等

如果很少改變了很多,在發生變化時可能是更明智的存儲值和更新。

如果總數是不斷變化的,這將是更明智的只是每個查詢的計算。

但除非你服務的請求的巨量,這筆錢將花費你幾乎沒有什麼和可能是更容易保持數據的完整性在良好的狀態。