不久前,我得到了一些有关特定查询的帮助。这是链接:SQL Group BY 在新列中使用字符串 https://stackoverflow.com/questions/31012881/sql-group-by-using-strings-in-new-columns
我的查询看起来与此类似:
SELECT event_data, class_40_winner, class_30_winner
FROM events e
LEFT JOIN (SELECT result_event, name AS class_40_winner
FROM results
WHERE class = 40 AND position = 1) c40 ON e.id = c40.result_event
LEFT JOIN (SELECT result_event, name AS class_30_winner
FROM results
WHERE class = 30 AND position = 1) c30 ON e.id = c30.result_event
现在,我已在数据库中输入了足够的数据(22,000 行),该查询需要 6 秒多的时间才能完成。 (我的实际查询比上面的查询更大,因为它现在有 4 个连接。)
我在查询中使用了“解释”功能来查看。 “结果”表中的每个查询都会拉入 22,000 行,因此这似乎是问题所在。
我做了一些研究,听起来我应该能够在“结果”表上索引相关列以帮助加快速度。但当我这样做时,它实际上将我的查询速度减慢到了大约 10 秒。
对于我可以采取哪些措施来改进此查询有什么建议吗?
AFAIK,你正在旋转你的数据,我认为使用max(case ...) ... group by
在旋转数据方面具有良好的性能。
我可以建议您改用此查询:
select event_date
, max(case when r.class = 40 then name end) `Class 40 Winner`
, max(case when r.class = 30 then name end) `Class 30 Winner`
from events e
left join results r on e.event_id = r.result_event and r.position = 1
group by event_date;
[SQL Fiddle 演示] http://www.sqlfiddle.com/#!9/e0a43/3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)