【问题标题】:inner join optimization after group by the subquery子查询分组后的内连接优化
【发布时间】:2020-03-01 07:50:55
【问题描述】:

所以我一直致力于优化具有 group by 语句的子查询的内部联接。下面的查询大约需要 1.8 到 2 秒才能获取。我想对其进行优化,我认为子查询将是一个关键。

我不确定内部联接中带有 group by 的子查询是否可以使用索引来联接另一个表。我相信子查询中的列(在这种情况下是 A2,C2)不能在内部连接中有自己的索引。对吗?

所以,我的问题是如何优化此查询语句,是否可以在内连接中在 A2、C2 上设置索引。

SELECT A, C, X.S
FROM tb_g X 
INNER JOIN ( 
    SELECT A AS A2, MAX(C) AS C2
    FROM tb_g
    GROUP BY A 
) Y 
ON X.A = Y.A2 AND X.C = Y.C2;

【问题讨论】:

    标签: mysql groupwise-maximum


    【解决方案1】:

    A, C 上的复合索引应尽可能优化此查询:

    ALTER TABLE tb_g ADD INDEX (A, C);
    

    这个索引可以让子查询完全用索引计算,然后和中间表的join就可以在原表中最优取数据了。

    【讨论】:

    • 感谢您的回答。实际上它已经有索引(A,C)。我想这就是为什么索引允许子查询使用索引范围扫描的原因。但是我还是不知道为什么要对Y表进行全表扫描
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2023-01-03
    相关资源
    最近更新 更多