mysql中按年月统计的一些命令性能比较

今天大致上考虑统计每月的订单量,那测试库中的一百多万条数据测试一下,


大致结果如下:

 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()函数的那条记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值