【问题标题】:Join a cached query (sql,nosql, or whatever exist on earth)加入缓存查询(sql、nosql 或地球上存在的任何东西)
【发布时间】:2015-02-17 05:38:37
【问题描述】:

经过 1 个月的研究,问题仍未解决。 我需要在联接、内部联接或其他任何内容中缓存查询的一部分。

编辑:上面示例中的子查询是一个地理搜索,它在半径搜索中选择所有邮政编码,那些查询结果永远不会改变) 示例:

SELECT complex things who never be cached 
INNER JOIN ( select SQL_CACHE all things easely cached and unmodified )

据我所知 mysql 无法做到这一点, ma​​ria db 有时可以使用 IN 缓存子查询,但不能使用 JOIN 东西。

我唯一的实际解决方案非常棒:

放入memcached:

select SQL_CACHE very things cached and unmodified 

内爆结果数组:

$bob=('a','b','c');

然后进行两步查询:

SELECT complex things who never be cached IN ($bob);

这不是一个解决方案,因为我可以在 IN 列表中有 30000 个项目..

我完全愿意接受任何解决方案或建议
问候,
鲍勃

【问题讨论】:

  • 在 Postgres 中,尝试:create materialized view as ...

标签: mysql postgresql caching elasticsearch nosql


【解决方案1】:

只需在数据库中创建一个新表,用作结果的“缓存”,不会被修改。通过这种方式,您可以轻松加入数据库中的任何其他数据。

【讨论】:

  • 不幸的是,这是不可能的,因为子查询是一个地理搜索查询,确实有很多可能性,巴黎 50 公里与巴黎 400 公里不同 .. 所以预查询应该在缓存中,创建和打开大量表是从 vue 的性能来看是不可能的
  • 所以你会根据距离存储结果吗?我想这几乎是不切实际的,因为您可以拥有几乎无限的源纬度/经度和距离组合的组合。为什么不尝试优化您的地理搜索?
  • 没有无限的解决方案,搜索是四舍五入和近似的,有很多可能性但不是无限的,地理搜索确实得到了广泛的优化,所有其他可能的解决方案都已经过测试..:)
  • 那么......几乎不可能用关于整个事情的少量信息提供一个几乎很好的解决方案......
猜你喜欢
  • 1970-01-01
  • 2019-03-16
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 2017-06-20
  • 2014-12-20
相关资源
最近更新 更多