业务SQL优化
1,个人开户报表统计
优化前语句,执行时间80多秒
SELECT
a.DA AS f_da,
a.account_name AS f_account_name,
a.sex AS f_sex,
a.nick_name AS f_nickname,
a.create_time AS f_open_account_time,
DATE_FORMAT(a.create_time, '%Y%m%d') AS f_open_account_date,
HOUR (a.create_time) AS f_open_account_hour,
a.group_ids AS f_group_id,
a.f_reg_source AS f_reg_source,
t.f_user_area_id AS f_user_area_id,
t.f_user_type AS f_user_type,
t.f_source AS f_user_source,
device.device_id AS f_device_id,
CONCAT_WS(
",",
device.f_cai_id,
device.f_mobile_id,
device.f_pid_id,
device.f_stb_id
) AS f_device_series_id,
t.f_customer_code AS f_customer_code,
token.f_first_login_time AS f_first_login_time,
DATE_FORMAT(
token.f_first_login_time,
'%Y%m%d'
) AS f_first_login_date,
HOUR (token.f_first_login_time) AS f_first_longin_hour,
token.f_app_version AS f_app_version
FROM
(
(
(
account_info a
LEFT JOIN t_da_boss_info t ON a.DA = t.f_da
)
LEFT JOIN (
SELECT
d.home_id,
GROUP_CONCAT(d.device_id) AS device_id,
GROUP_CONCAT(d.cai_id) AS f_cai_id,
GROUP_CONCAT(d.mobile_id) AS f_mobile_id,
GROUP_CONCAT(d.pad_id) AS f_pid_id,
GROUP_CONCAT(d.stb_id) AS f_stb_id
FROM
device_info d
GROUP BY
d.home_id
) device ON a.home_id = device.home_id
)
LEFT JOIN (
SELECT
b.DA,
b.f_extend,
b.f_extend AS f_app_version,
MIN(b.f_create_time) AS f_first_login_time
FROM
account_token b
GROUP BY
b.DA
) token ON a.DA = token.DA
)
WHERE
a.create_time > '20000101'
AND a.create_time < '20000102'
优化后语句,执行2S
EXPLAIN
SELECT SQL_NO_CACHE
a.DA AS f_da,
a.account_name AS f_account_name,
a.sex AS f_sex,
a.nick_name AS f_nickname,
a.create_time AS f_open_account_time,
a.home_id AS f_home_id,
DATE_FORMAT(a.create_time, '%Y%m%d') AS f_open_account_date,
HOUR (a.create_time) AS f_open_account_hour,
a.group_ids AS f_group_id,
a.f_reg_source AS f_reg_source,
t.f_user_area_id AS f_user_area_id,
t.f_user_type AS f_user_type,
t.f_customer_code AS f_customer_code,
d.device_id AS f_device_id,
CONCAT_WS(
",",
d.f_cai_id,
d.f_mobile_id,
d.f_pid_id,
d.f_stb_id
) AS f_device_series_id,
min(b.f_first_login_time) as min_f_first_login_time,
DATE_FORMAT(
b.f_first_login_time,
'%Y%m%d'
) AS f_first_login_date,
HOUR (b.f_first_login_time) AS f_first_longin_hour,
b.f_app_version AS f_app_version
FROM
((account_info a
LEFT JOIN t_da_boss_info t ON a.DA = t.f_da)
LEFT JOIN (
SELECT
home_id,
GROUP_CONCAT(device_id) AS device_id,
GROUP_CONCAT(cai_id) AS f_cai_id,
GROUP_CONCAT(mobile_id) AS f_mobile_id,
GROUP_CONCAT(pad_id) AS f_pid_id,
GROUP_CONCAT(stb_id) AS f_stb_id
FROM
device_info
GROUP BY
home_id
)
d ON a.home_id = d.home_id)
LEFT JOIN (
SELECT
DA,
f_extend,
f_extend AS f_app_version,
f_create_time AS f_first_login_time
FROM
account_token
) b ON a.DA = b.DA
WHERE
a.create_time BETWEEN '2000-01-01 00:00:00'
AND '2000-01-02 00:00:00' GROUP BY a.da;
account_token表改为走主键DA,DA字段有主键,join走主键,速度很快
业务SQL优化的更多相关文章
- 4W条人才表循环处理业务sql优化过程
场景: 使用windows服务定时更新合同数据:执行存储过程(pas_RefreshContractStatus),但存储过程里面有一个需要更新4W条人才表循环处理业务 问题: 循环更新4W条人才表状 ...
- 性能优化之永恒之道(实时sql优化vs业务字段冗余vs离线计算)
在项目中,随着时间的推移,数据量越来越大,程序的某些功能性能也可能会随之下降,那么此时我们不得不需要对之前的功能进行性能优化.如果优化方案不得当,或者说不优雅,那可能将对整个系统产生不可逆的严重影响. ...
- SQL优化案例—— RowNumber分页
将业务语句翻译成SQL语句不仅是一门技术,还是一门艺术. 下面拿我们程序开发工程师最常用的ROW_NUMBER()分页作为一个典型案例来说明. 先来看看我们最常见的分页的样子: WITH CTE AS ...
- sql 优化
1.选择最有效率的表名顺序(只在基于规则的优化器中有效): oracle的解析器按照从右到左的顺序处理 from 子句中的表名,from子句中写在最后的表(基础表driving table)将被最先处 ...
- (转)SQL 优化原则
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...
- SQL优化技巧
我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关 ...
- 提高SQL查询效率(SQL优化)
要提高SQL查询效率where语句条件的先后次序应如何写 http://blog.csdn.net/sforiz/article/details/5345359 我们要做到不但会写SQL,还要做到 ...
- 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)
基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编 ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...
- Oracle SQL 优化原则(实用篇)
由于SQL优化优化起来比较复杂,并且还受环境限制,在开发过程中,写SQL必须遵循以下几点原则: 1.Oracle 采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他Where ...
随机推荐
- C++面向对象高级编程(六)转换函数与non-explicit one argument ctor
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 1.conversion function 转换函数 //1.转换函数 //conversion function //只要你认为合理 你可以任 ...
- C#设置System.Net.ServicePointManager.DefaultConnectionLimit,突破Http协议的并发连接数限制
在Http协议中,规定了同个Http请求的并发连接数最大为2. 这个数值,可谓是太小了. 而目前的浏览器,已基本不再遵循这个限制,但是Dot Net平台上的 System.Net 还是默认遵循了这个标 ...
- Linux:wc命令详解
wc 用来计算数字 利用wc指令我们可以计算文件的Byte数.字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据. 语法 wc(选项)(参数) 选项 -c或 ...
- ffmpeg新老接口对比
http://blog.csdn.net/leixiaohua1020/article/details/41013567
- iad 集成三两事
1. 好像是随着ios8的beta开始. iad 已经发生了一些变化. 比如找不到enable iad network 的按钮了. 貌似是不需要手动去 enable 了. 只需要嵌入 iad fra ...
- Keras 自定义层
1.对于简单的定制操作,可以通过使用layers.core.Lambda层来完成.该方法的适用情况:仅对流经该层的数据做个变换,而这个变换本身没有需要学习的参数. # 切片后再分别进行embeddin ...
- java 导入Excel -- 套路及代码分析
一.思路分析 1.我们要做导入,实际上也就是先文件上传,然后读取文件的数据. 2.我们要有一个导入的模板,因为我们导入的Excel列要和我们的数据字段匹配上,所以我们要给它来一个规定,也就是模板. 3 ...
- zookeeper 学习命令
ls /TianheSoft/nodesls /TianheSoft/nodes/localhost_2181-0000000000ls /TianheSoft/propsls /TianheSoft ...
- Mac设置SVN:Cornerstone3
前因 在windows下用Tortoisesvn.可惜Tortoisesvn没有Mac版,只能上知乎寻找适合于 Mac的SVN软件. 经过 找到了一款名为Cornerstone的软件.在App Sto ...
- python文件写中的f.flush()方法
f = open("input.txt", "w") f.write("aaaaaa") f.flush() #强行把缓冲区中的内容放到磁盘 ...