admin

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

sql

在所有人的帮助下,我终于设法使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函数的WITHOUT相比,向MySQL查询中添加sort函数的速度会变慢吗?例如:

      ORDER BY insert_date ASC

最后一个问题: 是否仍然要缓存MySQL结果,因此在排序时,我不必进行新的查询?

非常感谢!

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


阅读 260

收藏
2021-06-07

共1个答案

admin

问题1 (检索ID,然后查询数据库):为什么不从Solr查询返回某些字段,以使您不必总是也必须访问数据库?

Q2 (性能和排序):嗯,排序是要对数据执行的额外任务,因此势必会增加数据库的工作量:如果您的ORDER BY列上有索引,则当然可以将其最小化)。

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

http://ehcache.org/

2021-06-07