COUNT(*) 与手动跟踪计数器?

COUNT(*) vs manual tracking of counters?

我有一个 table 大约。 70000 个条目。它包含有关品牌、型号和商品类别的信息。用户可以使用这些的任意组合来查询它们,并且必须根据他的选择更新显示的符合条件的商品的计数器。

我使用

这样的查询完成了它
SELECT model,COUNT(*) AS count FROM table$model_where 
          GROUP BY model
          ORDER BY count DESC

其中 $model_where 取决于其他条件。但是我的老板要求我使用一个特殊的计数器 table 重做这些查询,因为他认为它们正在减慢整个过程,但我提出的基准测试表明情况并非如此,样本输出:

The code took: 0 wallclock secs (0.02 usr + 0.00 sys = 0.02 CPU)

它从一开始就测量整个例程,直到数据发送给用户,你可以看到它真的很快。

我已经对这个问题做了一些研究,但我仍然没有看到关于何时使用 COUNT(*) 与计数器 tables 的明确答案。谁是对的?我不相信我们真的需要手动跟踪这个,但也许我知道的很少。

根据您的具体情况,这可能是也可能不是 premature optimization

如果下周您的桌子要大 100 倍,情况可能并非如此,否则就是这样。

此外,您的老板应该考虑到您和其他所有人都必须确保每当计数记录上发生 INSERTDELETE 时更新计数器。有些框架会自动执行此操作(想到 rails 的 ActiveRecord 上的 ruby),但如果您不使用其中一个,则有大约无数种方法可以最终在数据库中出现错误的计数器