【问题标题】:How should I query MySQL and how to cache the results from MySQL?我应该如何查询 MySQL 以及如何缓存 MySQL 的结果?
【发布时间】:2010-01-31 20:34:48
【问题描述】:

在你们所有人的帮助下,我终于设法让 Solr 工作了,非常感谢! 我不得不说,我现在明白你为什么推荐它了,它真的很强大。

现在,这个问题...

我已将所有“可搜索”信息索引到Solr,我的计划是查询Solr,然后获取查询结果的ID:s(所有记录,即每条记录都有一个ID 字段值) ,然后我将其用于query MySQL 并获取其余信息。 因此,首先查询 Solr,下一个 solr 为所有匹配查询的广告发回 id:s,然后我使用 ID:s 查询 MySQL 以获取其余信息。

我的问题是,当使用 MySql 做部分时,我是否应该将所有收到的 ID:s 保存到 array,然后 query mysql 以查找具有这些 ID:s 的所有记录? 我应该做这样的事情吗? (可能包含一些代码错误):

       for ($i=0; $i<$id_from_solr.length; $i++){
       mysql_query("SELECT * FROM table_name WHERE ad_id=$id_from_solr[$i]");
       }

以上似乎不是是一个好的解决方案,因为它每次循环时都会执行“新查询”!

你会怎么做?

后续问题: 与不使用排序函数相比,在 MySQL 查询中添加排序函数会减慢速度吗?例如:

      ORDER BY insert_date ASC

最后一个问题: 反正有没有缓存 MySQL 结果,所以在排序时,我不必进行新查询?

非常感谢!

如果您需要更多信息,请告诉我,我会更新此 Q!

【问题讨论】:

  • 如果使用 ORDER BY 查询很慢,请尝试在该库仑上添加一个 INDEX。
  • 我认为您的意思是“缓存”而不是“捕获” - 为了清楚起见,我进行了此编辑。

标签: php sql mysql database


【解决方案1】:

问题 1(检索 ID,然后查询数据库):为什么不从 Solr 查询中返回一些字段,这样您就不必总是访问数据库? p>

Q2(性能和排序):好吧,排序代表对数据执行的一项额外任务,因此必然会为数据库增加一些工作:这当然可以最小化如果您的 ORDER BY 列上有索引。

Q3(捕获 MySql 查询):您可以打开 MySql 缓存(如果请求与前一个匹配,它将返回结果的缓存副本,假设数据没有更改在此期间),或者使用数据库外部的缓存层,例如 EhCache:

http://ehcache.org/

【讨论】:

    【解决方案2】:

    对于第一部分,这是我编写单个查询语句的方式:

    $instr=implode(", ",$id_from_solr);
    $stmt = "SELECT * FROM table_name WHERE ad_id IN (".$instr.")";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-06
      • 2013-04-09
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 2013-06-28
      相关资源
      最近更新 更多