微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-MySQL中的查询缓存

我正在构建一个相当大的统计系统,该系统需要允许用户请求给定过滤器集(例如日期范围)的统计信息.

例如这是一个简单的查询,返回10个结果,包括player_id和每个玩家造成的击杀次数

SELECT player_id, SUM(kills) as kills
FROM `player_cache`
GROUP BY player_id
ORDER BY kills DESC
LIMIT 10
OFFSET 30

上面的查询会将结果偏移30(即结果的第3个“页面”).然后,当用户选择“下一页页面时,它将使用OFFSET 40(而不是30).

我的问题是,即使在同一数据集上使用了LIMIT / OFFSET对,也没有任何缓存,它再次执行SUM(),只是将结果再偏移10个.

上面的示例是一个更大的查询的简化版本,该查询仅返回更多字段,并且花费很长时间(20秒,并且只会随着系统的增长而变得更长).

因此,我实质上是在寻求一种通过在应用LIMIT / OFFSET之前缓存状态来加快页面加载速度的解决方案.

解决方法:

您当然可以使用缓存,但是我建议缓存结果,而不是MysqL中的查询.

但是首先,请确保a)对数据有正确的索引,b)正在使用它.

如果这不起作用,则对于大型数据集,group by趋于缓慢,您需要将摘要数据放入静态表/文件/数据库中.

有几种技术/库等可以帮助您执行数据的服务器端缓存. PHP Caching to Speed up Dynamically Generated Sites提供了一个非常简单但自我说明的示例.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐