【问题标题】:MySQL query cache for expensive queries?用于昂贵查询的 MySQL 查询缓存?
【发布时间】:2016-02-15 02:11:20
【问题描述】:

我有一个返回前 10 名销售产品的查询,并在主页上使用:

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) 考虑到这是评估每个产品的销售总和(来自每个产品具有多行的库存表),这是一个计算成本高的查询 - 或者更确切地说 会是 如果这样是一个大型数据库吗?

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

老实说,我只是在寻找提高效率的方法。

【问题讨论】:

标签: php mysql caching


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 2023-03-19
      • 2010-09-20
      相关资源
      最近更新 更多