MySQL巧用sum、case和when优化统计查询


本文整理自网络,侵删。

最近在公司做项目,涉及到开发统计报表相关的任务,由于数据量相对较多,之前写的查询语句查询五十万条数据大概需要十秒左右的样子,后来经过老大的指点利用sum,case...when...重写SQL性能一下子提高到一秒钟就解决了。这里为了简洁明了的阐述问题和解决的方法,我简化一下需求模型。

现在数据库有一张订单表(经过简化的中间表),表结构如下:

CREATE TABLE `statistic_order` (
 `oid` bigint(20) NOT NULL,
 `o_source` varchar(25) DEFAULT NULL COMMENT '来源编号',
 `o_actno` varchar(30) DEFAULT NULL COMMENT '活动编号',
 `o_actname` varchar(100) DEFAULT NULL COMMENT '参与活动名称',
 `o_n_channel` int(2) DEFAULT NULL COMMENT '商城平台',
 `o_clue` varchar(25) DEFAULT NULL COMMENT '线索分类',
 `o_star_level` varchar(25) DEFAULT NULL COMMENT '订单星级',
 `o_saledep` varchar(30) DEFAULT NULL COMMENT '营销部',
 `o_style` varchar(30) DEFAULT NULL COMMENT '车型',
 `o_status` int(2) DEFAULT NULL COMMENT '订单状态',
 `syctime_day` varchar(15) DEFAULT NULL COMMENT '按天格式化日期',
 PRIMARY KEY (`oid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

项目需求是这样的:

统计某段时间范围内每天的来源编号数量,其中来源编号对应数据表中的o_source字段,字段值可能为CDE,SDE,PDE,CSE,SSE。

来源分类随时间流动

一开始写了这样一段SQL:

select S.syctime_day,
 (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'CDE',
 (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'SDE',
 (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'PDE',
 (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'CSE',
 (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'SSE'
 from statistic_order S where S.syctime_day > '2016-05-01' and S.syctime_day < '2016-08-01' 
 GROUP BY S.syctime_day order by S.syctime_day asc;

这种写法采用了子查询的方式,在没有加索引的情况下,55万条数据执行这句SQL,在workbench下等待了将近十分钟,最后报了一个连接中断,通过explain解释器可以看到SQL的执行计划如下:

阅读剩余部分

相关阅读 >>

php4 与 mysql 数据库操作函数详解

sql语句修改数据

sql 中 having 的用法?

mybatis4 之mybatis动态sql的实现代码

sql server中identity(自增)的用法详解

sql中like的用法

mssql批量插入数据优化详细

mybatis动态sql标签的用法详解

sql优化经验总结

mysql数据库入门之备份数据库操作详解

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...