我应该如何查询MySQL以及如何缓存MySQL的结果?

时间:2010-01-31 20:34:49

标签: php sql mysql database

我终于得到了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]");
       }

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

你会怎么做?

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

      ORDER BY insert_date ASC

最后一个Q: 无论如何都要缓存MySQL结果,所以在排序时,我不必进行新的查询吗?

非常感谢!

如果您需要更多输入,请告诉我,我会更新此问号!

2 个答案:

答案 0 :(得分:3)

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

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

Q3 (捕获MySql查询):您可以打开MySql缓存(如果请求与之前的请求匹配,将返回结果的缓存副本,假设数据尚未更改)在临时),或使用数据库之外的缓存层,如EhCache:

http://ehcache.org/

答案 1 :(得分:1)

对于第一部分,这是我如何编写单个查询语句:

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