SELECT * FROM LOGS WHERE datetime > DATE_SUB(NOW(), INTERVAL 1 MONTH)
我有一个大表日志(innodb)。当我试图获取上个月的数据时,查询等待的时间太长。我为列datetime创建了一个索引,但似乎没有帮助。如何加快查询速度?
snvhrwxg1#
因为数据库记录是从最旧到最新插入的,所以可以创建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
这是多个电话,但它可以更快,但我相信你可以结合这两个电话太。
gzjq41n42#
可能您唯一能做的就是在上创建聚集索引 datetime . 这将确保这些值位于同一位置。然而,我不认为这能解决你真正的问题。你为什么要把一个月的记录都带回来。这是大量的数据。很可能,您可以对数据库中的数据进行汇总,只带回所需的信息,而不是所有的数据。
datetime
2条答案
按热度按时间snvhrwxg1#
因为数据库记录是从最旧到最新插入的,所以可以创建2个调用。请求最早记录的id的第一个调用:
然后使用该id只需请求id>oldestrecordid:
这是多个电话,但它可以更快,但我相信你可以结合这两个电话太。
gzjq41n42#
可能您唯一能做的就是在上创建聚集索引
datetime
. 这将确保这些值位于同一位置。然而,我不认为这能解决你真正的问题。你为什么要把一个月的记录都带回来。这是大量的数据。
很可能,您可以对数据库中的数据进行汇总,只带回所需的信息,而不是所有的数据。