PHP:如何在单个查询中优化这些 MySQL 查询?

标签 php mysql sql

是否可以将以下内容优化为单个查询?

我在这里假设单个查询比使用临时表的多个查询更有效,所以如果我的假设不正确请告诉我。

$id 是当前的memberid。 $list 是要从最终结果中删除的 itemid 列表(例如,已下载的项目)。

这个查询应该做什么它找到下载了与 $id 成员相似项目的前 500 名成员。然后找出这些成员下载过的所有项目,根据每个成员的相似下载次数和每个项目的下载总数进行评分排序。因此,最终结果是针对 $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。*

最佳答案

  1. 不可能用 mysql_query()
  2. 认为在这种情况下将 3 个调用合并为一个会节省一些明显的东西是错误的

需要明确的是,这是一种非常普遍的错觉 - 认为单个困惑的查询会比多个查询运行得更快。它不会。

关于PHP:如何在单个查询中优化这些 MySQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15924430/

相关文章:

php - 我如何分析为什么gettext不起作用?

java - JSP 页面和 mysql 数据库连接在未知时间后断开(大约 2 天)

php - 如何将 IF 语句与 UPDATE 语句结合使用

当where子句子查询具有无效列名时返回所有记录的SQL查询...?

php - 在 pdf 上生成未找到图像或键入未知 barryvdh\dompdf 错误

php - 为什么我的 css 或 html 在 codeigniter 中加载?

MYSQL:错误 1064(42000) MariaDB 服务器在 'NOT NULL' 附近使用正确的语法

mysql - SQL查询没有正确使用索引

sql - 运行 plsql block 时出现无效标识符错误

php - 使用 Redis 引擎配置 Cakephp 2.6.0