Innodb
我應該使用 select count(*) 來計算記錄還是使用像 comments_no 這樣的欄位來表示 post、comments 等表?
在我最近的一個關於亞洲國家社交網路的項目中,我懷疑我是否使用下面的 SQL 語句來計算記錄:
SELECT COUNT(id) shareLikeNo FROM user_share_like WHERE jusid=$jusid
或者更新shares(posts)表中的comment_no之類的欄位?我有shares_no、comments_no、likes_no 等欄位。每次使用者點擊
like button
likes_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
這是更好的方法嗎?
- 您需要多久執行一次此查詢?
如果它很少,那麼,也許沒關係。你可以做“SELECT COUNT(1) FROM …”,不需要使用“SELECT COUNT(id)”。SELECT COUNT(id) 在您的情況下不是必需的。有關何時使用 SELECT COUNT(1) 等的更多資訊,請參閱此處。 2. 正如上面 Justin Cave 所指出的,它是否需要一直準確?
如果您需要它準確,您可能不得不承受查詢的成本。
如果沒有,也許您可以考慮記憶體該值,並且每個時間段僅執行一次查詢(每 5 秒一次?)
可能涉及許多微妙的事情,這些將有助於指導討論:
SHOW CREATE TABLE shareLikeNo;
顯示表狀態,如“shareLikeNo”;
顯示變數,如 ‘%buffer%’;
如果您的流量太忙,您可能已經放棄了實時更新“喜歡”的概念。