存储行数或只计算行数?

时间:2012-03-01 15:10:31

标签: mysql database database-design

为了举例说明我的情况,请考虑一个问题&像stackoverflow一样回答平台。基本上有questionsanswers个表。显示特定问题的答案数量的最佳做法是什么?

  • questions表中是否有“计数列”?每次添加或删除新答案时,都应更新“计数列”。

  • 或者只是在answers表中使用MySQL计算答案的行数?我对此选项的关注是对数据库的加载,但我不确定。

2 个答案:

答案 0 :(得分:4)

我不担心加载数据库,除非您确实发现它是一个问题。实际上,保持计数的选项需要对每个CRUD操作进行额外更新,因此我认为这比偶尔的计数更有开销。首先使用KISS,如果发现问题,请修复它:)

答案 1 :(得分:1)

我现在会保持简单,并使用COUNT来返回行,但是您应该注意一些注意事项。

MySQL能够使用COUNT(*)查询的索引,因此MySQL不必点击实际的表行数据来获取计数。需要注意的是,如果您对允许NULL值的列尝试COUNT(column)查询,MySQL仍然必须扫描行以计算NULL值,因为NULL值不存储在索引中。

因此,请确保针对定义为NOT NULL的列请求COUNT

MyISAM表存储行计数,因此表中所有行的COUNT(*)查询都是超轻量级的。这是可能的,因为MyISAM锁定整个表,强制进行顺序更新。因此,MyISAM总是知道有多少行。