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之间的时区陷阱。