1

对不起,如果以前有人问过这个问题,但我尝试寻找类似的东西但找不到任何东西。

我有三个表:users、hobbies 和 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查询更快?

4

2 回答 2

0

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

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

对于可伸缩性,我建议使用内部连接来缩小初学者的可能性。

批判性地思考这个问题。是否有任何其他未提及的列可以表明用户可能有多个爱好?这些是您在寻求扩展应用程序时考虑的事项。

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

我会选择选项#2。

于 2012-12-16T18:52:50.910 回答
0

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

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

于 2012-12-16T18:05:58.660 回答