SELECT *
FROM LOGS
WHERE datetime > DATE_SUB(NOW(), INTERVAL 1 MONTH)
我有一个大表 LOGS (InnoDB)。当我尝试获取上个月的数据时,查询等待时间太长。
我为日期时间列创建了索引,但它似乎没有帮助。如何加速这个查询?
最佳答案
由于数据库记录是按照从最旧到最新的顺序插入的,因此您可以创建 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
这是多个调用,但可能会更快,但我相信您也可以合并这两个调用。
关于mysql - 如何加快Mysql中日期时间的查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51023758/