我似乎無法找到關於此的很多信息。SQL COUNT(col)vs extra logging column ...效率?
我有一個表記錄用戶的意見。我有另一張桌子來記錄每個評論的其他用戶的喜好/不喜歡。 因此,當選擇要顯示在網頁上的這些數據時,需要一個複雜的查詢來請求連接和子查詢來計算所有喜歡/不喜歡的事物。 我的例子是查詢別人好心幫我在這裏,以實現所要求的結果:
SELECT comments.comment_id, comments.descr, comments.created, usrs.usr_name,
(SELECT COUNT(*) FROM comment_likers WHERE comment_id=comments.comment_id AND liker=1)likes,
(SELECT COUNT(*) FROM comment_likers WHERE comment_id=comments.comment_id AND liker=0)dislikes,
comment_likers.liker
FROM comments
INNER JOIN usrs ON (comments.usr_id = usrs.usr_id)
LEFT JOIN comment_likers ON (comments.comment_id = comment_likers.comment_id
AND comment_likers.usr_id = $usrID)
WHERE comments.topic_id=$tpcID
ORDER BY comments.created DESC;
不過,如果我添加了一個好惡的意見表列並創建了一個觸發自動遞增/遞減這些列作爲喜歡插入/刪除/更新到LIKER表,那麼SELECT語句將比現在更簡單和更有效。我在問,使用COUNTS進行這種複雜查詢還是需要額外的列和觸發器會更高效?
而一概而論,它是更有效的進行計數或到有定期被查詢時,計數一個額外的列?
可能重複[爲什麼人們在新數據庫的列中保存X的數量?](http://stackoverflow.com/questions/6883352/why-do-people-saves-count-of-x-in-new-databases-column) –
請參閱建議的副本。非常類似的問題 - 存儲聚合而不是在每個頁面視圖上重新計算它們會更有效。 –
是的,謝謝你的鏈接,我已經能夠閱讀關於此事的第一個真實信息。 – Psyrus