用于昂贵查询的MySQL查询缓存?

时间:2016-02-14 18:02:43

标签: php mysql caching

我有这个查询返回前十大销售产品,并在主页上使用:

SELECT a.id, a.title, SUM(b.sold) as 'sold' FROM products a
LEFT JOIN stock b ON b.product_id = a.id
GROUP BY a.id ORDER BY sold DESC LIMIT 10

此信息不需要是最新的 - 它只需要每天更新一次。所以我有两个问题,真的:

1)考虑到这是评估每个产品(从每个产品有多行的库存表)的销售SUM,这是一个计算成本高昂的查询 - 或者更确切地说 如果这样是一个大型数据库?

2)MySQL可以缓存此查询并且每天只更新一次吗?我知道它有一个默认使用的查询缓存,但据说每次销售商品的数量发生变化时,这个查询都会失效。

我只是想找到提高效率的方法,说实话。

2 个答案:

答案 0 :(得分:1)

我要做的是将其缓存在查询数据库的代码中。保留上次查询的时间戳,如果时间戳足够,则返回缓存的结果,而不是运行查询。你也可以使用像memcached或Redis这样的缓存系统......一旦你完成了设置,你可能会找到其他一百个你可以使用它的地方!

或者,如果您的主页上没有其他内容是动态的,您可以将您的主页转换为每天生成一次的静态HTML文件。简单&快。

答案 1 :(得分:1)

1)它与库存表中的行一样昂贵。

2)不,mysql没有这样的东西。要缓存单个查询,您应该使用应用程序缓存。这是相当常见的要求,当然,如何做到这取决于您的应用程序及其架构。