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优化的更多相关文章

  1. 4W条人才表循环处理业务sql优化过程

    场景: 使用windows服务定时更新合同数据:执行存储过程(pas_RefreshContractStatus),但存储过程里面有一个需要更新4W条人才表循环处理业务 问题: 循环更新4W条人才表状 ...

  2. 性能优化之永恒之道(实时sql优化vs业务字段冗余vs离线计算)

    在项目中,随着时间的推移,数据量越来越大,程序的某些功能性能也可能会随之下降,那么此时我们不得不需要对之前的功能进行性能优化.如果优化方案不得当,或者说不优雅,那可能将对整个系统产生不可逆的严重影响. ...

  3. SQL优化案例—— RowNumber分页

    将业务语句翻译成SQL语句不仅是一门技术,还是一门艺术. 下面拿我们程序开发工程师最常用的ROW_NUMBER()分页作为一个典型案例来说明. 先来看看我们最常见的分页的样子: WITH CTE AS ...

  4. sql 优化

    1.选择最有效率的表名顺序(只在基于规则的优化器中有效): oracle的解析器按照从右到左的顺序处理 from 子句中的表名,from子句中写在最后的表(基础表driving table)将被最先处 ...

  5. (转)SQL 优化原则

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...

  6. SQL优化技巧

    我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关 ...

  7. 提高SQL查询效率(SQL优化)

    要提高SQL查询效率where语句条件的先后次序应如何写 http://blog.csdn.net/sforiz/article/details/5345359   我们要做到不但会写SQL,还要做到 ...

  8. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  9. Oracle SQL 优化原则(实用篇)

    由于SQL优化优化起来比较复杂,并且还受环境限制,在开发过程中,写SQL必须遵循以下几点原则: 1.Oracle 采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他Where ...

随机推荐

  1. APUE学习笔记——6 系统数据文件与信息

    1.用户口令:/etc/passwd文件 该文件中包含下列结构体信息.其中,当下主修熊passwd不再这里显示,是使用了一个占位符. struct passwd { char * pw_name; / ...

  2. vue.js 源代码学习笔记 ----- $watcher

    /* @flow */ import { queueWatcher } from './scheduler' import Dep, { pushTarget, popTarget } from '. ...

  3. Unity3D 屏幕空间雪场景Shader渲染

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...

  4. BitArray类的使用--(转换二进制数的内部实现过程)

    BitArray类用来处理位集合. 它和ArrayList十分类似,可以动态调整大小,可以在需要的时候添加二进制位而不用担心数组越界的问题.(所以本质它也是集合里套一个数组,可能是线性数组) 什么是位 ...

  5. 单机ZooKeeper配置

    1.创建zoo.cfg copy D:\zookeeper3.4.6\conf\zoo_sample.cfg zoo.cfg 修改追加如下内容 dataDir=D:/zookeeper3.4.6/da ...

  6. IOS开发 清空数组正确方法

    NSArray以及NSMutableArray 在Objc中的两种数组(不可变数组和可变数组), 在日常开发中,经常会遇到需要清空数组的情况,很多人下意识的会想到nil这个方法,这里是不提倡的.因为如 ...

  7. 【剑指offer】不用加减乘除做加法,C++实现

    原创博文,转载请注明出处! # 题目 # 思路 第一步:不考虑进位对每一位相加(异或操作) 第二步:考虑进位(位与运算+左移) 第三步:第一步和第二步相加(重复执行前两步) # 代码 #include ...

  8. 最新博客开启 - Noogle's Blogs

    博客地址: http://noogel.xyz/ 戳我进入 Noogle's Blogs

  9. TreeSet中自定义Comparator实现降序

    @Test public void test1() { TreeSet ts = new TreeSet<Integer>(new MyComparator()); ts.add(3); ...

  10. 用xapian来做索引

    最近一个项目需要正则搜索MongoDB,400多万的数据一次查询要20s以上,需要建立一个前端索引服务.本着部署简单.开发容易的原则,找到了xapian这个索引库. 我使用的是Python的接口,xa ...