COUNT()函数每次存储该值并将其加1?

我有一个用户'投票'表和'用户'表的数据库。 我想数据库会在很短的时间内变得相当大,所以我想用最有效的方法。

我想我可以每次都用'投票'表中的WHERE语句COUNT()投票数量,或者我可以将分数存储在'用户'表中,并且每次投票时只增加1添加。

哪个最好/最快,还有其他方法吗?


如果你正在考虑做到这一点的最佳方式。 你必须考虑优化和缓存很多。

我会说,在用户表上创建一个列来存储缓存的分数,但保持分数表上的分数。

每当分数变化操作分数表并用最新分数结果在用户表上触发更新时。

这样做,您的分数数据就具有可扩展性,就像使用计算器进行投票一样。


在正确的配置下(默认配置在大多数情况下足够好)MySQL 5.0+服务器缓存SUM,COUNT查询,所以MySQL正在自动处理这类查询。

但如果您使用的是旧版本(MySQL 4或更低版本),我建议将COUNT(*)值存储在数据库中,因为它确实会导致在更大的表上出现性能问题。

编辑:我发现的最佳做法是每次用户添加/删除投票/评论时都进行COUNT(*)查询。现代SQL服务器正在处理组查询,因此我们不必担心性能问题。


预算是经常非规范化优化之一。

因此,只需创建预先计算的列并使用触发器或应用程序代码进行维护即可。

正如@波希米亚指出的那样: 只有在出现性能问题时才需要这样做。

链接地址: http://www.djcxy.com/p/59181.html

上一篇: COUNT() function each time, or store the value and increment it by one?

下一篇: How to change the frame of UIKeyBoard programmatically in iOS