gpt4 book ai didi

mysql - 如何优化两个 MySQL 表之间的连接?

转载 作者:行者123 更新时间:2023-11-29 02:35:51 25 4
gpt4 key购买 nike

我有两个表: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。

现在,问题是这个查询根本无法完成:以前,我将我的 full_data 分成不同的表(每个 group_id 一个表),并且工作正常。但是现在我已经加入了这些组,查询就在那里运行,所以我只能假设我做了一些愚蠢的事情。

还有什么我可以尝试让这个查询以合适的速度运行吗?我确定我搞砸了索引和按功能分组的东西,但我无法弄清楚是什么。我已经尝试了上述查询的各种变体。 EXPLAIN 表明它正在“使用哪里;使用临时的;使用文件排序”,但我不确定如何解决这个问题。

谢谢!

最佳答案

我假设你的索引是组合索引(group_id 和 event_index 在一起)。如果每个字段都有单独的索引,那么一次只使用一个索引,数据库引擎会处理更多的数据。

例如,如果您只有几个唯一的 group_id,但是 很多 event_index,并且您有两个索引,一个仅在 group_id 上,另一个在 event_index 上,那么您的查询是为每个 group_id 运行大量行。如果您有 一个 索引,并且两个字段都按顺序排列,那么查询将运行得更快。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com