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提供了一个非常简单但自我说明的示例.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...