例如,如果我必须计算属于一篇文章的评论,很明显我不需要缓存评论总数。
但是如果我想对一个包含一百万张照片的图库( status = 1)进行分页,该怎么办呢?我应该将它保存在一个名为counts的表中,还是每次都选择count(id) as total就可以了?
还有其他的解决方案吗?
请给我建议。谢谢。
发布于 2012-01-30 21:17:42
对于MySQL,您不需要存储计数,您可以使用SQL_CALC_FOUND_ROWS来避免两次查询。
例如,
SELECT SQL_CALC_FOUND_ROWS *
FROM Gallery
WHERE status = 1
LIMIT 10;
SELECT FOUND_ROWS();从手册中:
在某些情况下,最好知道语句在没有限制的情况下会返回多少行,但不需要再次运行语句。要获得这个行数,可以在SELECT语句中包含一个SQL_CALC_FOUND_ROWS选项,然后调用FOUND_ROWS()。
示例用法here。
发布于 2012-01-30 21:19:14
这在一定程度上取决于在包含100万条记录的表上执行的查询量。考虑只关注好的索引,特别是多列索引(因为它们很容易被忘记):here.会做很多事情。并且,确保查询在您的服务器上也被很好地缓存。
如果您经常使用此列,请考虑保存它(如果它不能被MySQL缓存),因为它可能会变得很慢。但在大多数情况下,好的索引可以解决这个问题。
最好的尝试:设置一些测试,以确定当您连续多次执行查询时,查询是否仍然快速,性能是否不会下降。
EXPLAIN [QUERY] 使用该命令(在MySQL中)获取有关执行查询的方式以及是否可以改进的信息。
发布于 2012-01-30 21:19:03
https://stackoverflow.com/questions/9064417
复制相似问题