在php文件或mysql中手动计算?

时间:2012-12-16 17:50:03

标签: php mysql performance set intersection

打扰一下,如果之前有人询问过这个问题,但是我尝试寻找类似的东西,却找不到任何东西。

我有三个表:用户,爱好和user_hobbies(链接前两个)。我想基于他们的爱好来计算两个用户之间的相似性。为此,我首先需要两套:用户A爱好和用户B爱好,我可以通过两个简单的查询获得。我还必须在php文件中计算这两个集合,因为它们可以在两个数组中用于下一步:

我必须计算他们的共同爱好(即集合的交集)。

想法#1:有两个数组,我可以通过某种方法计算出共同的元素。

创意#2:我可以进行第三次查询(例如SELECT hobby FROM user_hobbies WHERE user_id IN ('uid_A', 'uid_B') GROUP BY hobby HAVING COUNT (*) = 2),而不是打扰自己。

我想我的问题是关于表现。手动计算或更快的mysql查询更快?

2 个答案:

答案 0 :(得分:0)

简而言之:如果您的操作不是设置基本操作,最好将其移出MsSql或任何RDBMS。

因为,您无法轻松扩展MsSQL。

答案 1 :(得分:0)

您已经有一个规范化的表来保存用户爱好表,那么为什么不这样做呢?

一般来说,SQL会快得多,至少对于前100k左右的记录来说。然后,您将看到通过未编制索引的列查询的查询或使用“filesort”查询ORDER BY关键字带来的大型数据集的查询的性能下降。

为了扩展性,我建议使用内连接来缩小初学者的可能性。

批判性地思考这一点。还有没有提到的其他列可能表明用户可能有多个爱好?这些是您在扩展应用程序时考虑的事项。

否则,你应该对初学者没问题,以免过早地进行优化。

我会选择#2选项。