Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 优化最小和最大查询_Mysql_Indexing_Max_Query Optimization_Min - Fatal编程技术网

Mysql 优化最小和最大查询

Mysql 优化最小和最大查询,mysql,indexing,max,query-optimization,min,Mysql,Indexing,Max,Query Optimization,Min,我的数据库表由1000多万条记录组成。我正在编写一个查询,其中包含已编制索引的created_date列上的MIN和MAX函数。但是,当我运行select语句时,它花费了太多的时间,有时执行时间结束,并且没有收到任何输出 有没有办法优化我的查询。下面是我正在尝试的问题 SELECT MIN(created_date) AS Min, MAX(created_date) as Max FROM network ORDER BY id DESC LIMIT 1000000 上面的查询将为您提供最新

我的数据库表由1000多万条记录组成。我正在编写一个查询,其中包含已编制索引的created_date列上的MIN和MAX函数。但是,当我运行select语句时,它花费了太多的时间,有时执行时间结束,并且没有收到任何输出

有没有办法优化我的查询。下面是我正在尝试的问题

SELECT MIN(created_date) AS Min, MAX(created_date) as Max FROM network ORDER
BY id DESC LIMIT 1000000
上面的查询将为您提供最新1000000行的最小和最大创建日期

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
该指数将有助于:

重读问题

最新日期只是MAXcreated\u date。第一百万个日期是“按创建日期描述限制从网络订单中选择创建日期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;
汇总表

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

找到Minu date有点乱;这意味着通过该表求和,找出计数加起来的时间约为100万,并声明发生的时间或其他时间

或者,最好是捕获每1000行的确切日期时间。这意味着要频繁地探测网络,并将创建的日期存储在ct列中。然后这将找到100万年前的大致时间:

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

并将其用作最小值的子查询。

上述查询不会为您提供最新1000000的最小值和最大值。ORDER BY和LIMIT子句是在聚合发生后应用的,因此是多余的。@您可以为此写下优化查询的原因是什么?最近1000000行的最大值和最小值?谢谢Rick。但我的要求是在0-5秒内得到结果。目前,您发布的查询大约需要13-20秒。如果1M不一定要精确到该值,我可以建议一种使用汇总表的方法,该方法可能需要不到一秒的时间。欢迎您的建议。请让我解释一下汇总表3和更多建议
CREATE TABLE Dates (
    create_date DATETIME NOT NULL,
    ct INT UNSIGNED NOT NULL,
    PRIMARY KEY(ct)
) ENGINE=InnoDB;
SELECT created_date
    FROM Dates
    ORDER BY created_date DESC
    LIMIT 1000, 1