业务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 ...
随机推荐
- Alt+Shift+R组合键,用来在一个java文件中批量的重命名变量。
myeclipse和eclipse集成编译软件,都提供了一个快捷键用来批量重命名变量:Alt+Shift+R组合键,用来在一个java文件中批量的重命名变量.扩展知识:如果想要重命名文件名,又不想手动 ...
- 【PL/SQL编程】循环语句
1. loop语句 loop plsql_sentence; exit when end_condition_exp; end loop; loop语句会先执行一次循环体,然后再判断“exit whe ...
- [置顶]
Android Glide传Context引发的非法参数异常那些小坑
今天中午调试一直出现nullContext 我的代码如下 解决办法: Glide.with(mContext) .load(mdl.getImage()) .centerCrop() .placeho ...
- vue_ form表单 v-model
插值两种方式:{{}},v-model v-model 可以用 v-model 指令在只能在表单 <input> 及 <textarea> 元素上创建双向数据绑定.它会根据控件 ...
- Qt 使用#define+qDebug()输出调试信息
/******************************************************************************************* * Qt 使用 ...
- CentOS下glibc更新
使用java -agentpath=xxx时报该错,提示glibc版本过低:version `GLIBC_2.14' not found (required by /data/jjns/UEISecu ...
- manacher 算法 这个人确实写得太好了;
O(n)回文子串(Manacher)算法 资料来源网络 参见:http://www.felix021.com/blog/read.php?2040 问题描述: 输入一个字符串,求出其中最大的回文子串. ...
- Licp - 一个玩具解释器的实现
纸上得来终觉浅,绝知此事要躬行. 最近看了 SICP,其第四章讲述了一个简单的 Scheme 解释器的实现.粗看了一遍后决定自己用 C 语言实现一个残疾的 Scheme 解释器,想来这样的学习效果应该 ...
- object references an unsaved transient instance【异常】
[异常提示] TransientObjectException: object references an unsaved transient instance -save the transient ...
- mysql拼接多条查询结果并且加序列
SELECT GROUP_CONCAT(a.DESCRIPTION SEPARATOR '\n') FROM (SELECT (@rowNum:=0) AS rowNo,CONCAT('公司内 ...