如何在 Mysql 中加快日期时间的查询

How to speed up query for datetime in Mysql

SELECT *
FROM LOGS
WHERE datetime > DATE_SUB(NOW(), INTERVAL 1 MONTH)

我有一个很大的 table 日志 (InnoDB)。当我尝试获取上个月的数据时,查询等待时间过长。

我为日期时间列创建了一个索引,但它似乎没有帮助。如何加快此查询?

可能您唯一能做的就是在 datetime 上创建聚簇索引。这将确保值位于同一位置。

但是,我认为这不会解决您的实际问题。你为什么要带回 all 个月的记录。这是很多数据。

很有可能,您可以汇总数据库中的数据,然后只带回您需要的信息,而不是所有数据.

由于数据库记录是按从旧到新的顺序插入的,因此您可以创建 2 个调用。请求最早记录 ID 的第一个调用:

int oldestRecordID = SELECT TOP 1 MIN(id) 
FROM LOGS 
WHERE datetime > DATE_SUB(NOW(), INTERVAL 1 MONTH)

然后使用该 ID 请求 ID > oldestRecordID:

的所有记录
SELECT *
FROM LOGS
WHERE ID > oldestRecordID

这是多个调用,但它可能会更快,但我相信您也可以将这 2 个调用结合起来。