2011-01-27 14 views
2

如果你正在實施一個博客應用程序 - 你寧願 -
有一個計數器中的「信息」表中存儲的評論數據庫查詢 - 更好地計數行數或更好保持增量計數器?

SELECT comment_count 
    FROM posts WHERE post_id = $id 

...或計數的評論的數量爲特定數量來自「評論」表的帖子:

SELECT COUNT(*) 
    FROM comments 
WHERE post_id = $id 

哪一個更優化?

+0

在這裏回答:http://dba.stackexchange.com/questions/239/storing-vs-calculating-aggregate-values – BenV 2011-01-27 05:15:08

回答

4

我會使用第二種形式COUNT,直到我確定該特定SQL查詢中的性能出現問題。你在第一個建議的基本上是反規範化,當你知道你需要它的時候,這是很好的,很棒的。

索引將允許您快速執行第二個查詢,無論如何。

0

讓我們來看看這些因素。

案例1:顯示帖子時顯示評論。這意味着你可以檢索它們並在顯示時統計它們。在那種情況下,沒有。情況2:顯示帖子時,您不顯示評論,但顯示一條顯示「15條評論」的鏈接。在那種情況下有一個等式。

物化計:保存= 1插入+ 1更新

成本一個職位顯示= 1讀

平均博客顯示數= d

成本

一個評論平均意見評論數= C

因此,對於顯示器D與評論C的比率是多少:

C *(插入+更新)< d *(讀)

因爲它通常是真的,d >> C,我建議額外的更新成本消失。

對於博客而言,這可能不是那麼重要,但知道何時有多個表並需要做出這些決定時,這是一個至關重要的公式。