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

时间:2018-06-25 12:42:00

标签: mysql sql innodb myisam

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

我有一个大表LOGS(InnoDB)。当我尝试获取上个月的数据时,查询等待时间太长。

我为列datetime创建了索引,但似乎无济于事。如何加快查询速度?

2 个答案:

答案 0 :(得分:1)

可能唯一可以做的就是在datetime上创建聚集索引。这样可以确保这些值位于同一位置。

但是,我认为这不会解决您的实际问题。为什么要从一个月取回所有记录。这是很多数据。

极有可能,您可以汇总数据库中的数据 ,而仅取回所需的信息而不是所有的数据

答案 1 :(得分:1)

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

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

然后使用具有该ID的ID仅请求ID> oldestRecordID的所有记录:

SELECT *
FROM LOGS
WHERE ID > oldestRecordID

这是多个通话,但速度可能会更快,但是我相信您也可以将这两个通话合并在一起。