为了举例说明我的情况,请考虑一个问题&像stackoverflow一样回答平台。基本上有questions
和answers
个表。显示特定问题的答案数量的最佳做法是什么?
questions
表中是否有“计数列”?每次添加或删除新答案时,都应更新“计数列”。
或者只是在answers
表中使用MySQL计算答案的行数?我对此选项的关注是对数据库的加载,但我不确定。
答案 0 :(得分:4)
我不担心加载数据库,除非您确实发现它是一个问题。实际上,保持计数的选项需要对每个CRUD操作进行额外更新,因此我认为这比偶尔的计数更有开销。首先使用KISS,如果发现问题,请修复它:)
答案 1 :(得分:1)
我现在会保持简单,并使用COUNT
来返回行,但是您应该注意一些注意事项。
MySQL能够使用COUNT(*)
查询的索引,因此MySQL不必点击实际的表行数据来获取计数。需要注意的是,如果您对允许NULL值的列尝试COUNT(column)
查询,MySQL仍然必须扫描行以计算NULL值,因为NULL值不存储在索引中。
因此,请确保针对定义为NOT NULL的列请求COUNT
。
MyISAM表存储行计数,因此表中所有行的COUNT(*)查询都是超轻量级的。这是可能的,因为MyISAM锁定整个表,强制进行顺序更新。因此,MyISAM总是知道有多少行。