您的位置:首页 > 数据库 > MySQL

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

2017-05-25 14:43 591 查看
今天大致上考虑统计每月的订单量,那测试库中的一百多万条数据测试一下,

大致结果如下:

 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()函数的那条记录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息