我在数据库中有一个巨大的日志表。log_id 和 log_date 上有一个索引。
当我以相反的顺序查询日志时,需要“永远”才能完成。虽然我没有顺序地进行相同的查询,但答案是立竿见影的。
如何调整表/改进查询以进行快速(呃)反向选择?
编辑:查询(对不起,查询在我脑海中很明显(在弗洛林也是如此!):
select * from logs ordered by log_date desc
一些指标:
表中有大约 4000 万行
select * from logs where log_id < 500
--> 在 0.032 秒内获取
select * from logs where log_id < 500 order by log_time desc;
--> 大约 20 秒内获取
$max 是最大 log_id 并且已在另一个查询中检索到
select * from logs where log_id > ($max - 500);
--> 大约 16 秒内获取
select * from logs where log_id > ($max - 500) order by log_time desc;
--> 大约 16 秒内获取
我的问题是如何改进所有需要太多秒执行的查询。
@Florin
使用“where”子句缩短了登录时间(where log_time >= truncate(sysdate))
,我的性能很好,但我需要能够选择很长一段时间内的日志或过去很长一段时间内的日志。在这种情况下,查询仍然很慢(比如 20 秒)。