2016-01-30 46 views
2

我在組項目中工作。我有這些表:使用計數函數或在sql中創建特定列進行計數

SELECT COUNT(1) AS Counts FROM [Groups].[GroupMembers] 
WHERE GroupId=Id; 

或者,我可以添加其他列Groups表計數,每一次新的成員加入: enter image description here

我可以通過使用count函數獲取成員對每個組的數量對該組,該字段將增加1。使用計數功能還是添加另一列進行計數會更好?換句話說,每種方法的優點和缺點是什麼?

回答

1

它取決於你的表引擎。如果你的表引擎是MyISAM,它會更快,因爲它只是從存儲值中讀取表中的行數,但Innodb引擎需要執行全表掃描。

建議不要在表格本身中存儲計數,因此如果這是您擔心的問題,請儘可能使用MyISAM引擎。

在表中存儲值無需額外地在每個新/丟失的成員資格上查詢UPDATE

2

根本不建議創建一列來存儲計數。

當你想要每個組的計數,你可以使用簡單的Select查詢來顯示每個組的計數。

SELECT G.groupid, 
     Count(userid) 
FROM groups G 
     LEFT OUTER JOIN groupmembers GM 
        ON G.groupid = GM.groupid 
GROUP BY G.groupid 

如果你想添加一個新列,那麼你將需要一個TriggerGroupMembers表更新Groups表計列,當一個新的用戶添加到任何組中GroupMembers