Mysql查询当天/当月数据SQL优化案例节选

SQL查询速度慢,大多数在于表结构或SQL质量差,而不是服务器性能;

案例一:

部分业务报表需要展示当日、本周、本月、本季度的业务数据,若使用百度Top10的版本例如:

select * from 表名 where to_days(时间字段名) = to_days(now());

会出现比较明显的性能问题,若数据量达千万,则查询时间需要数秒。即使对查询字段建立索引,也没有任何改善。

所以很明显,采用上述方法并未命中索引,实际上应该对数据做了全遍历;

改善方案:

采用下面的SQL查询时,也能达到需要的效果,但查询时间仅为几十毫秒:

select * from 表名 where 查询字段名 BETWEEN DATE_FORMAT(NOW(),"%Y-%m-%d 00:00:00") and DATE_FORMAT(NOW(),"%Y-%m-%d 23:59:59")

注意,采用改善方案SQL时,需要考虑Mysql Client和Mysql Server之间的时区陷阱。