我在这里尝试从根本上找到确实拥有某项事件所针对的运动和地区的用户。在 access [users] 表中有大约 17K 用户。每个人都可以有一定数量的运动兴趣和一个地区。
这里的查询查找至少拥有一项运动和一个区域的每个用户,这些用户是通过事件定位的。当我们选择每个 em 时,Sports 最多可以达到 75 [对于 IN 查询不太好]。
SELECT a.user, pp.courriel
FROM acces a
LEFT JOIN acces_profil_sport ap ON ap.id = a.id
LEFT JOIN profil_perso pp ON pp.id = a.id
WHERE ap.sport_id IN
(
SELECT ac.sport_id
FROM activite_sport ac
RIGHT JOIN activite a ON a.activite_id = ac.activite_id AND a.is_cron = 1 AND a.cron_processed = 0
)
AND pp.region_id IN
(
SELECT ar.region_id
FROM activite_region ar
RIGHT JOIN activite a ON a.activite_id = ar.activite_id AND a.is_cron = 1 AND a.cron_processed = 0
)
GROUP BY a.id
如果我删除运动查找,查询需要大约 30 秒才能运行。否则它会花费很长时间并且使用大约 99% 的 proc 与 mysql。
有什么帮助的提示吗?
[编辑:表结构]
访问:id(主键),用户,perso_
id(配置文件的键/外键_
perso[perso_
id])[其他领域]
profil_
perso : perso_
id (primary key) courriel, region_
id, id (foreign key to acces[id]) [一些其他领域]
acces_
profil_
sport : id/sport_
id(双主键),niveau_
id(双运动键 _
id)
最佳答案
我怀疑你的索引有误。如果您打印出 explain select...,我可以对此做出更好的评论。此外,我很好奇你为什么要进行左/右连接和子选择。
在我看来,这些应该都是正常连接,因为两个左连接只有在它们存在时才有效。如果它们为空,则由于所需的子选择匹配,您将得不到一行。
至于右边的连接,你需要那里的 ar 位,它不是右边的一部分。我要么删除它们,要么让它们直接连接。我假设因为您正在检查看起来像未处理的 cron 工作,所以您想保留它们。
SELECT a.user, pp.courriel
FROM acces
JOIN acces_profil_sport ap ON ap.id = a.id
JOIN profil_perso pp ON pp.id = a.id
JOIN activite_sport ac ON ac.sport_id = ap.sport_id
JOIN activite a1 ON a.activite_id = ac.activite_id AND a.is_cron = 1 AND a.cron_processed = 0
JOIN activite_region ar ON ar.region_id = pp.region_id
JOIN activite a2 ON a.activite_id = ar.activite_id AND a.is_cron = 1 AND a.cron_processed = 0
关于php - 洞察查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/894092/
多年来,这一直是令人困惑和沮丧的根源。假设您导入了一个文档记录特别差的模块,并且您需要的某个方法只有 **kwargs 作为其参数,您应该如何知道该方法正在检查哪些键? def test(**kwar
一:背景 1. 讲故事 前几天写了一篇 如何洞察 .NET程序 非托管句柄泄露 的文章,文中使用 WinDbg 的 !htrace 命令实现了句柄泄露的洞察,在文末我也说了,Wi
所以我正在尝试使用 Facebook Python API提取我们的参与数据(点赞、分享等,基本上是 Facebook 网站上“洞察”选项卡下的所有内容)。 我已设法通过 API 建立连接并使访问 t
我注意到从 facebook insights 返回的数据在从 API 获取数据时与从 CSV 导出数据中获取时存在一致的差异。例如,对于某个指标 (page_impressions_unique_d
我用 Python 创建了一个 XGBoost 模型,并使用以下代码来更好地理解该模型: xgb.plot_importance(model) 或 xgb.plot_importance(model,
谁能告诉我 Visual Studio 的内存转储中概述的行为类型 正常吗?例如,StackExchange.Redis.PhysicalConnection 在包含大小(字节)上运行得那么高吗?还是
谁能告诉我 Visual Studio 的内存转储中概述的行为类型 正常吗?例如,StackExchange.Redis.PhysicalConnection 在包含大小(字节)上运行得那么高吗?还是