业务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 ...
随机推荐
- json 解析double类型多出几位小数,利用NSDecimalNumber修复 , 服务器返回的数据,用数据类型接收(int,NSNumber)?
后台返回float类型数据8.2,实际用AFN的json解析后得到8.1999999999,该怎么处理呢? 开发中处理处理价格金额问题, 后台经常返回float.double类型, 打印或转成NSS ...
- 【LeetCode 67_字符串_算术运算】Add Binary
string addBinary(string a, string b) { int alen = a.size(); int blen = b.size(); ) return b; ) retur ...
- three.js入门系列之光源
首先创建场景来试验各种光源带来的不同效果: 一.锥形光源(聚光灯) SpotLight 接下来缩小范围(π/7): 二.基础光源(环境光) AmbientLight 上例中没有添加环境光,使得周围黑漆 ...
- C# ListBox 子项数据更新
今天在倒腾ListBox控件的数据编辑时,遇到了一个小小的问题,现在就把解决方法记录下来,如果各位道友有更好的方法,一定要留言赐教. 问题还原: 有一个界面,有这么一个ListBox用来显示所有的角色 ...
- HDU 数位dp
模板http://www.cnblogs.com/jffifa/archive/2012/08/17/2644847.html 完全理解以后,我发现这种写法实在是太厉害了,简洁,优美,可以回避很多细节 ...
- IOS开发 static关键字的作用
(1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次, 因此其值在下次调用时仍维持上次的值: (2)在模块内的 static 全局变量可以被模块内所 ...
- js之3D轮播图
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Java HotSpot JVM垃圾回收
一.J2SE 5.0 HotSpot JVM堆内存包括:年轻代.老年代.永久代 年轻代包括:Eden区.Survivor区 Survivor区包括:From区.To区 1. 年轻代GC(young g ...
- 自回归模型(AR )
2017/7/2 19:24:15 自回归模型(Autoregressive Model,简称 AR 模型)是最常见的平稳时间序列模型之一.接下将介绍 AR 模型的定义.统计性质.建模过程.预测及应用 ...
- Oracle基本概念与数据导入
Oracle基本概念 实例 一个Oracle实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构(Memory Structures)组成.一 ...