爲了舉例說明我的情況,請考慮問題&回答像stackoverflow這樣的平臺。基本上有questions
和answers
表。顯示特定問題的答案數量的最佳做法是什麼?存儲行數或只計算行數?
questions
表中是否應該有「count column」?每次添加或刪除新答案時,都應更新「計數欄」。或者只是在
answers
表中計算使用MySQL的答案行?我對這個選項的擔心是數據庫的負載,但我不確定。
爲了舉例說明我的情況,請考慮問題&回答像stackoverflow這樣的平臺。基本上有questions
和answers
表。顯示特定問題的答案數量的最佳做法是什麼?存儲行數或只計算行數?
questions
表中是否應該有「count column」?每次添加或刪除新答案時,都應更新「計數欄」。
或者只是在answers
表中計算使用MySQL的答案行?我對這個選項的擔心是數據庫的負載,但我不確定。
我不會擔心數據庫的負載,除非你真的發現它是一個問題。事實上,保持計數的選項需要對每個CRUD操作進行額外的更新,所以我認爲這會比偶爾的計數花費更多。首先去KISS,如果你發現問題,然後修復它:)
我會保持現在簡單,並使用COUNT
來返回行,但有一些警告,你應該知道。
MySQL能夠使用COUNT(*)
查詢的索引,因此MySQL不必擊中實際的錶行數據來獲得計數。需要注意的是,如果您針對允許NULL值的列嘗試COUNT(column)
查詢,則由於NULL值未存儲在索引中,因此MySQL仍然需要掃描行來計算NULL值。
因此,請確定您要求COUNT
針對定義爲NOT NULL的列。
MyISAM表存儲行計數,因此表中所有行的COUNT(*)查詢超級輕量級。這是可能的,因爲MyISAM鎖定整個表格,強制順序更新。因此,MyISAM總是知道有多少行。