MySQL 左连接查询,分组依据和排序依据极慢

MySQL Query with left join, group by and order by extremely slow

我有以下查询,执行大约需要 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

为了可读性,我从应用程序中使用的查询稍微简化了这个查询,但我一直在测试这个简化的查询,问题仍然存在。所以问题出在这部分。

Table 页:大约 3K 条记录。 Table 访客:大约 300K 条记录。

我做了什么:

我尝试过的:

有什么改进此查询的想法吗?

首先,试试 我的第一个建议是在加入之前进行聚合:

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;

但是,您的查询需要进行聚合和排序,而您没有进行过滤。我不确定您能否更快地获得它。