我可以使用count函数获取每个组的成员数:
SELECT COUNT(1) AS Counts FROM [Groups].[GroupMembers]
WHERE GroupId=Id;
或者我可以向Groups
表添加另一列进行计数,每次新成员加入该组时,此字段将增加1。使用计数功能或添加另一列进行计数更好吗?换句话说,每种方法的优点和缺点是什么?
答案 0 :(得分:2)
根本不建议创建用于存储计数的列。
当您想要每个组的计数时,您可以使用简单的Select
查询来显示每个组的计数。
SELECT G.groupid,
Count(userid)
FROM groups G
LEFT OUTER JOIN groupmembers GM
ON G.groupid = GM.groupid
GROUP BY G.groupid
如果您要添加新列,那么当新用户添加到任何组时,您需要在Trigger
表上GroupMembers
更新Groups
表中的计数列在GroupMembers
表
答案 1 :(得分:1)
这取决于你的桌面引擎。如果你的表引擎是MyISAM
,它会更快,因为它只是从存储的值中读取表中的行数,但是Innodb
引擎需要进行全表扫描。
建议不要在表格内部存储计数,因此如果您担心这一点,请尽可能使用MyISAM
引擎。
在表中存储值将不必要地对每个新的/丢失的成员资格进行额外的UPDATE
查询。