今天的一个需求,需要在一个800多万的数据表中查询当天某个项目的日志信息。给定的查询条件是项目名称和发生时间。项目名称是varchar类型,发送时间是bigint型。这两个数据字段都不是主键,也没有添加索引。通过以下搜索语句做一个搜索所需要的时间为22秒左右。
select * from project_log where start_time>=1559577600000 and start_time<=1559663999000 and project_name='project1';
以上搜索语句一共获取了24条记录。然后这样的时间消耗是完全不能接受的。因为我们每天大约有4000多个项目需要做统计工作。为了提高搜索效率,我们在以上SQL语句后面加上了Order By条件,先对开始时间排序,因为开始时间start_time是int型,排序的速度应该很快。修改后新的SQL语句如下:
select * from project_log where start_time>=1559577600000 and start_time<=1559663999000 and project_name='project1' ORDER BY start_time DESC;
在终端中运行该语句,改善的效果立竿见影。检索速度降低到7秒,速度将近提高了3倍多。随着项目数量的增加,估计在查询速度上还需要进一步的改进。
扫码联系船长