Innodb

我應該使用 select count(*) 來計算記錄還是使用像 comments_no 這樣的欄位來表示 post、comments 等表?

  • March 1, 2013

在我最近的一個關於亞洲國家社交網路的項目中,我懷疑我是否使用下面的 SQL 語句來計算記錄:

SELECT COUNT(id) shareLikeNo FROM user_share_like WHERE jusid=$jusid

或者更新shares(posts)表中的comment_no之類的欄位?我有shares_no、comments_no、likes_no 等欄位。每次使用者點擊like buttonlikes_no 欄位時,都會增加其他欄位,正如我解釋的那樣。

這樣,每次使用者發表評論或分享文章或喜歡文章時,我都必須更新每條記錄。

我應該使用SELECT COUNT(id) FROM tblname等來獲取記錄計數還是只更新記錄。

每秒大約會有 10 到 20 個文章。網站的流量會上升。

我應該使用哪種方法?哪個更貴?

編輯:

我使用use index(PRIMARY)如下來加快速度:

SELECT COUNT(id) shareLikeNo FROM user_share_like USE INDEX(PRIMARY) WHERE jusid=$jusid

另一種方法是:

SELECT SUM(1) shareLikeNo FROM user_share_like WHERE jusid=$jusid

這是更好的方法嗎?

  1. 您需要多久執行一次此查詢?

如果它很少,那麼,也許沒關係。你可以做“SELECT COUNT(1) FROM …”,不需要使用“SELECT COUNT(id)”。SELECT COUNT(id) 在您的情況下不是必需的。有關何時使用 SELECT COUNT(1) 等的更多資訊,請參閱此處。 2. 正如上面 Justin Cave 所指出的,它是否需要一直準確?

如果您需要它準確,您可能不得不承受查詢的成本。

如果沒有,也許您可以考慮記憶體該值,並且每個時間段僅執行一次查詢(每 5 秒一次?)

可能涉及許多微妙的事情,這些將有助於指導討論:

SHOW CREATE TABLE shareLikeNo;

顯示表狀態,如“shareLikeNo”;

顯示變數,如 ‘%buffer%’;

如果您的流量太忙,您可能已經放棄了實時更新“喜歡”的概念。

引用自:https://dba.stackexchange.com/questions/19805