是否可以将以下内容优化为单个查询?
我在这里假设单个查询比使用临时表的多个查询更有效,所以如果我的假设不正确,请告诉我。
$id
是当前的memberid。$list
是要从最终结果中删除的 itemid 列表(例如,已下载的项目)。
这个查询应该做什么它找到前 500 名下载过类似项目的$id
会员。然后找到这些会员下载的所有项目,根据每个会员的相似下载次数和每个项目的总下载次数按分数排名。因此,最终结果是针对该$id
成员的推荐列表。
查询是:
mysql_query('CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY AS
(SELECT a.memberid, COUNT(*) `score` FROM table_downloads a INNER JOIN
(SELECT itemid FROM table_downloads WHERE memberid='.$id.') b ON a.itemid = b.itemid
WHERE a.memberid!='.$id.' GROUP BY a.memberid HAVING score>0 ORDER BY score DESC LIMIT 500)');
$res=mysql_query('SELECT table_downloads.itemid,COUNT(table_downloads.itemid*temp1.score) AS score2
FROM table_downloads,temp1
WHERE table_downloads.memberid=temp1.memberid AND table_downloads.itemid NOT IN ('.$list.')
GROUP BY table_downloads.itemid
ORDER BY score2 DESC LIMIT 30');
mysql_query('DROP TABLE temp1');
如果有几百万行,则此查询可能会花费太长时间而无法使用。任何有关确保它快速执行的建议也将不胜感激。
*我故意使用 mysql_query。请不要告诉我使用 mysqli.*