我有两个表:púgroup.full戋data,这是我正在处理的一个大型数据集(10万行,200列)和p戋group.full戋data戋aggregated,它是我为汇总其他表而生成的。
现在,我想做的是在full_data和full_data_aggregated之间执行连接,以选择特定的行、平均值等。我的问题如下:

SELECT 'name', p.group_id, a.group_condition, p.event_index, AVG(p.value) FROM p_group.full_data p
JOIN p_group.full_data_aggregated as a on p.group_id = a.group_id AND p.event_index = a.event_index
WHERE (a.group_condition='open')
GROUP BY p.group_id, p.event_index

我有一个索引:full_data.group_id,full_data.event_index和full_data_aggregated.group_id,full_data_aggregated.event_index,full_data_aggregated.group_condition。
现在,问题是这个查询根本无法完成:以前,我将完整的数据拆分成不同的表(每个组一个id),这很好。但现在我已经将这些组连接在一起,查询就在那里运行,所以我只能假设我做了一些愚蠢的事情。
还有什么我可以试着让这个查询以合适的速度运行吗?我肯定我把索引和按功能分组搞砸了,但我搞不清楚是什么。我试过上述问题的各种变体。EXPLAIN表示它是“使用where;使用temporary;使用filesort”,但我不确定如何解决这个问题。
谢谢!

最佳答案

我假设您的索引是组合索引(将组id和事件索引放在一起)。如果每个字段都有单独的索引,那么一次只使用一个索引,数据库引擎将处理更多的数据。
例如,如果只有几个唯一的组id,但有很多事件索引,并且有两个索引,一个只在组id上,另一个在事件索引上,则查询将为每个组id运行大量行。如果有一个索引,两个字段都按顺序排列,则查询将运行得更快。

关于mysql - 如何优化两个MySQL表之间的联接?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5289904/

10-09 05:53
查看更多