【问题标题】:MySQL avoiding GROUP BY columns from different tablesMySQL避免来自不同表的GROUP BY列
【发布时间】:2015-03-03 05:03:04
【问题描述】:

我有以下查询,它对来自不同表的 2 列进行分组。我知道这可能会导致性能问题。我不确定如何进行优化。非常感谢任何帮助!

查询

SELECT tableA.col AS tableAcol, 
       tableB.col AS tableBcol, 
       SUM(tableB.count) AS total
FROM tableB, tableA
WHERE tableB.uid = tableA.uid 
AND tableA.eid=? 
GROUP BY tableA.col, tableB.col

【问题讨论】:

    标签: mysql group-by


    【解决方案1】:

    您可以使用执行部分求和的子查询,以减小外部查询中该求和的JOIN 的大小。

    SELECT tableA.col AS tableAcol
           tableBgrouped.col AS tableBcol,
           SUM(tableBgrouped.count) AS total
    FROM tableA
    JOIN (SELECT uid, col, SUM(count) AS count
          FROM tableB
          GROUP BY uid, col) AS tableBgrouped
    ON tableA.uid = tableBgrouped.uid
    WHERE tableA.eid = ?
    GROUP BY tableAcol, tableBcol
    

    【讨论】:

      【解决方案2】:
      SELECT A.`col` AS tableAcol
             B.`col` AS tableBcol,
             SUM(B.`count`) AS total
      FROM tableA A
      JOIN (SELECT B1.`uid`, B1.`col`, SUM(B1.`count`) AS count
            FROM tableB B
            GROUP BY B1.`uid`, B1.`col`) AS B
      ON A.`uid` = B.`uid`
      WHERE A.`eid` = ?
      GROUP BY A.`col`, B.`col`
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-25
        • 1970-01-01
        • 1970-01-01
        • 2010-12-18
        • 1970-01-01
        相关资源
        最近更新 更多