SELECT *
FROM LOGS
WHERE datetime > DATE_SUB(NOW(), INTERVAL 1 MONTH)
我有一个大表LOGS(InnoDB)。当我尝试获取上个月的数据时,查询等待时间太长。
我为列datetime创建了索引,但似乎无济于事。如何加快查询速度?
答案 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
这是多个通话,但速度可能会更快,但是我相信您也可以将这两个通话合并在一起。