今天大致上考虑统计每月的订单量,那测试库中的一百多万条数据测试一下,
大致结果如下:
1. select year(createtime) years, date_format(createtime,'%Y%m') months,count(bidding_id) from au_bidding_log group by years,months with rollup;
正在显示第 0 - 22 行 (共 23 行, 查询花费 8.8775 秒。)
2. select year(createtime) years, date_format(createtime,'%Y%m') months,count(bidding_id) from au_bidding_log group by years,months;
正在显示第 0 - 18 行 (共 19 行, 查询花费 3.1377 秒。)
可见,使用了rollup命令后,sql语句执行的更慢,得不偿失。
如果仅为了获取每年的销售情况,可以在代码中累加即可,不要用rollup语句比较好。
rollup命令确实很好用,如果既想统计出每月的销量也想统计出每年的销量,最后再统计出总销量,可以用上述的第一条sql命令,
查出来的结果如下:
如果需要分别按年/按月来统计的话,以下3条语句中,最后一条性能最好,但是出来的结果需要在代码中二次处理才行,就是截取出年份再统计一次即可。
如果仅仅是按照月份来统计销售额的话,以下这两条语句均能实现,性能对比如下: 3.select date_format(createtime,'%Y%m') months,count(bidding_id) from au_bidding_log group by months; 正在显示第 0 - 18 行 (共 19 行, 查询花费 3.1339 秒。) 4. select substr(createtime,1,7) months,count(bidding_id) from au_bidding_log group by months ; 正在显示第 0 - 18 行 (共 19 行, 查询花费 2.8838 秒。) 按月份统计数据更好一些的写法是 使用substr()函数的那条记录