优化 MIN & MAX 查询
Optimize MIN & MAX query
我的数据库 table 包含超过 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
以上查询将为您提供 MIN AND MAX,created_date
最近的 1 000 000 行。
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;
总结Table
CREATE TABLE Dates (
create_date DATETIME NOT NULL,
ct INT UNSIGNED NOT NULL,
PRIMARY KEY(ct)
) ENGINE=InnoDB;
然后,每隔一小时(或其他时间单位),统计记录的数量并存储在那里。
找MIN(created_date)
有点乱;这意味着通过 table 求和以找到计数何时加起来大约 1M,并声明它发生的时间(或其他时间)。
或者(可能更好)是捕获每个第 1000 行的确切 DATETIME
。这意味着经常探测 network
,并只存储 created_date
(删除 ct
列)。然后这样就找到了1M前的近似时间:
SELECT created_date
FROM Dates
ORDER BY created_date DESC
LIMIT 1000, 1
(并将其用作 Min 的子查询。)
我的数据库 table 包含超过 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
以上查询将为您提供 MIN AND MAX,created_date
最近的 1 000 000 行。
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;
总结Table
CREATE TABLE Dates (
create_date DATETIME NOT NULL,
ct INT UNSIGNED NOT NULL,
PRIMARY KEY(ct)
) ENGINE=InnoDB;
然后,每隔一小时(或其他时间单位),统计记录的数量并存储在那里。
找MIN(created_date)
有点乱;这意味着通过 table 求和以找到计数何时加起来大约 1M,并声明它发生的时间(或其他时间)。
或者(可能更好)是捕获每个第 1000 行的确切 DATETIME
。这意味着经常探测 network
,并只存储 created_date
(删除 ct
列)。然后这样就找到了1M前的近似时间:
SELECT created_date
FROM Dates
ORDER BY created_date DESC
LIMIT 1000, 1
(并将其用作 Min 的子查询。)