项目中存在数据量较大的流水数据,对流水数据进行按日,7日,30日,本月,本年等维度进行统计时,存在sql慢的问题,针对这一问题,对这类sql进行时间维度的优化,加索引,优化时间查询语句
例:查询今日内数据 (50万数据条测试) 优化前select a.time from table where to_days(a.time) >= to_days(now())
优化前sql运行0.734秒
通过explain进行查询rows有50万条
- 给table表的time字段加上index索引后,进行优化sql
ALTER TABLE `table` ADD INDEX `index` (`time` ASC);
- 优化sql,通过explain进行调试语句,优化后rows为1(当日无数据)
select a.time from table a where a.time >= DATE_FORMAT(now(),'%Y-%m-%d 00:00:00') and a.time <= DATE_FORMAT(now(),'%Y-%m-%d 23:59:59')优化后
通过优化50万条数据测试结果为0.015秒
今天select a.time from table a where a.time >= DATE_FORMAT(now(),'%Y-%m-%d 00:00:00') and a.time <= DATE_FORMAT(now(),'%Y-%m-%d 23:59:59')昨天(待更新) 近7日
select a.time from table a where a.time >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 7 DAY),'%Y-%m-%d 00:00:00')近30日
select a.time from table a where a.time >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 30 DAY),'%Y-%m-%d 00:00:00')本月
select a.time from table a where a.time >= DATE_FORMAT(now(),'%Y-%m-01 00:00:00')上月(待更新) 本季(待更新) 上季(待更新) 本年
select a.time from table a where a.time >= DATE_FORMAT(now(),'%Y-01-01 00:00:00')上年(待更新) 这周(待更新) 上周(待更新) 查询距离当前现在6个月的数据 (待更新)



