我有以下查询,大约需要15秒才能执行。如果我删除ORDER BY,则需要3秒,这仍然太长。
SELECT
pages.id AS id,
pages.page_title AS name,
SUM(visitors.bounce) AS bounce,
SUM(visitors.goal) AS goal,
count(visitors.id) AS volume
FROM
pages
LEFT JOIN visitors ON pages.id = visitors.page_id
GROUP BY pages.id
ORDER BY volume DESC
为了便于阅读,我稍微简化了该应用程序中使用的查询,但我一直在使用这个简化的查询进行测试,问题仍然存在。所以问题出在这一部分。
表页:约3K记录。表访问者:约300K记录。
我做了什么:
我尝试过:
改善此查询的任何想法?
答案 0 :(得分:1)
首先,试试 我的第一个建议是在加入之前进行聚合:
SELECT p.id, p.page_title AS name,
v.bounce, v.goal,v.volume
FROM pages p LEFT JOIN
(SELECT page_id, sum(v.bounce) as bounce, sum(v.goal) as goal,
count(*) as volumn
FROM visitors v
GROUP BY page_id
) v
ON pages.id = v.page_id
ORDER BY volume DESC;
但是,您的查询需要同时执行聚合和排序 - 并且您没有过滤。我不确定你是否能够更快地获得它。