优化MIN& MAX查询

时间:2017-06-05 05:52:44

标签: mysql indexing max query-optimization min

我的数据库表包含超过1000万条记录。我正在编写一个包含MIN和MAX函数的查询,该函数已在我已编入索引的created_date列中。但是当我运行我的select语句时,它需要花费太多时间,有时候执行时间会结束并且不会收到任何输出。

有没有办法优化我的查询。我正在尝试的查询如下。

SELECT MIN(created_date) AS Min, MAX(created_date) as Max FROM network ORDER
BY id DESC LIMIT 1000000

上述查询将为您提供最近1 000 000行的MIN AND MAX,created_date

1 个答案:

答案 0 :(得分:1)

SELECT MIN(created_date) AS Min,
       MAX(created_date) AS Max   -- Get min and max from the 1M rows
    FROM (
        SELECT created_date
            FROM network
            ORDER BY created_date desc
            LIMIT 1000000
         ) AS recent          -- Collect the latest 1M rows

此索引可以帮助一些

INDEX(created_date)

重读问题

最新日期只是MAX(created_date)。第一百万个日期是`(SELECT created_date FROM network ORDER BY created_date DESC LIMIT 1000000,1)

所以,这是第一选:

SELECT ( SELECT created_date FROM network
            ORDER BY created_date DESC LIMIT 1000000, 1 ) AS Min,
       MAX(created_date) AS Max
    FROM network;

汇总表

CREATE TABLE Dates (
    create_date DATETIME NOT NULL,
    ct INT UNSIGNED NOT NULL,
    PRIMARY KEY(ct)
) ENGINE=InnoDB;

然后,每小时(或其他时间单位)计算记录数并将其存储在那里。

查找MIN(created_date)有点乱;它意味着通过该表求和,以查找计数加起来大约为1M,并声明小时(或其他)发生的时间。

或者(可能更好)是捕获每第1000行的确切DATETIME。这意味着经常探测network,并仅存储created_date(删除ct列)。然后,这会找到1M前的近似时间:

SELECT created_date
    FROM Dates
    ORDER BY created_date DESC
    LIMIT 1000, 1

(并将其用作Min的子查询。)