2012-03-01 61 views
1

爲了舉例說明我的情況,請考慮問題&回答像stackoverflow這樣的平臺。基本上有questionsanswers表。顯示特定問題的答案數量的最佳做法是什麼?存儲行數或只計算行數?

  • questions表中是否應該有「count column」?每次添加或刪除新答案時,都應更新「計數欄」。

  • 或者只是在answers表中計算使用MySQL的答案行?我對這個選項的擔心是數據庫的負載,但我不確定。

回答

4

我不會擔心數據庫的負載,除非你真的發現它是一個問題。事實上,保持計數的選項需要對每個CRUD操作進行額外的更新,所以我認爲這會比偶爾的計數花費更多。首先去KISS,如果你發現問題,然後修復它:)

1

我會保持現在簡單,並使用COUNT來返回行,但有一些警告,你應該知道。

MySQL能夠使用COUNT(*)查詢的索引,因此MySQL不必擊中實際的錶行數據來獲得計數。需要注意的是,如果您針對允許NULL值的列嘗試COUNT(column)查詢,則由於NULL值未存儲在索引中,因此MySQL仍然需要掃描行來計算NULL值。

因此,請確定您要求COUNT針對定義爲NOT NULL的列。

MyISAM表存儲行計數,因此表中所有行的COUNT(*)查詢超級輕量級​​。這是可能的,因爲MyISAM鎖定整個表格,強制順序更新。因此,MyISAM總是知道有多少行。