首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候应该考虑将总计数保存在字段中?

问什么时候应该考虑将总计数保存在字段中?
EN

Stack Overflow用户
提问于 2012-01-30 21:13:36
回答 3查看 66关注 0票数 2

例如,如果我必须计算属于一篇文章的评论,很明显我不需要缓存评论总数。

但是如果我想对一个包含一百万张照片的图库( status = 1)进行分页,该怎么办呢?我应该将它保存在一个名为counts的表中,还是每次都选择count(id) as total就可以了?

还有其他的解决方案吗?

请给我建议。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-30 21:17:42

对于MySQL,您不需要存储计数,您可以使用SQL_CALC_FOUND_ROWS来避免两次查询。

例如,

代码语言:javascript
复制
SELECT SQL_CALC_FOUND_ROWS * 
FROM Gallery
WHERE status = 1
LIMIT 10;
SELECT FOUND_ROWS();

从手册中:

在某些情况下,最好知道语句在没有限制的情况下会返回多少行,但不需要再次运行语句。要获得这个行数,可以在SELECT语句中包含一个SQL_CALC_FOUND_ROWS选项,然后调用FOUND_ROWS()。

示例用法here。

票数 4
EN

Stack Overflow用户

发布于 2012-01-30 21:19:14

这在一定程度上取决于在包含100万条记录的表上执行的查询量。考虑只关注好的索引,特别是多列索引(因为它们很容易被忘记):here.会做很多事情。并且,确保查询在您的服务器上也被很好地缓存。

如果您经常使用此列,请考虑保存它(如果它不能被MySQL缓存),因为它可能会变得很慢。但在大多数情况下,好的索引可以解决这个问题。

最好的尝试:设置一些测试,以确定当您连续多次执行查询时,查询是否仍然快速,性能是否不会下降。

代码语言:javascript
复制
EXPLAIN [QUERY] 

使用该命令(在MySQL中)获取有关执行查询的方式以及是否可以改进的信息。

票数 2
EN

Stack Overflow用户

发布于 2012-01-30 21:19:03

每次都计算一下就可以了。

在分页期间,无论如何都可以使用SQL_CALC_FOUND_ROWS

注意:

  1. 不规范的计数将变得陈旧
  2. 没有人会分页这么多项目
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9064417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档