Mysql min / max优化

时间:2012-04-22 22:51:08

标签: mysql database optimization query-optimization

我有一个表(我们称之为tableA),看起来像这样:

    id    |   dateA    |   dateB    
----------|------------|-------------
    1     | 2011-01-01 | 2010-05-01
    1     | 2011-05-01 | 2010-06-12
    2     | 2011-01-11 | 2010-01-31
    2     | 2011-01-31 | 2010-02-01
    3     | 2011-05-11 | 2010-08-02
    3     | 2011-08-02 | 2010-09-10

我的目标是按ID对行进行分组,并获得dateA和dateB的最小值 并得到一个看起来像这样的表:

    id    | min(dateA) | max(dateB)
----------|------------|-------------
    1     | 2011-01-01 | 2010-06-12
    2     | 2011-01-11 | 2010-02-01
    3     | 2011-05-11 | 2010-09-11

现在,我正在使用LEFT加入方式:

SELECT
    id,
    tableB.dateA,
    tableC.dateB
FROM tableA as a

    LEFT JOIN (
        SELECT id, min(dateA)
        FROM tableA
        GROUP BY id
    )tableB ON a.id = tableB.id

    LEFT JOIN (
        SELECT id, max(dateB)
        FROM tableA
        GROUP BY id
    )tableC ON a.id = tableC.id

然而,我的方法太慢了。我有一个很大的桌子,大约需要7秒才能得到理想的结果。

有人能建议我采用一种很好的优化技术来应用我的情况吗?

谢谢。

Ĵ

1 个答案:

答案 0 :(得分:2)

简单的GROUP BY使用一次通过表而没有自连接有什么问题?

SELECT id, MIN(dateA), MAX(dateB)
  FROM TableA
 GROUP BY id;