优化SQL脚本—求所有投资人首月投资金额
来源:互联网 发布:形容女生的词语网络词 编辑:程序博客网 时间:2024/05/18 02:10
工作中遇到个问题:要求所有投资人首月投资的金额。举例说明:求fff4d7d1752f4950b088c5b550a82ac9的首月投资金额即求2015-12月所有的投资金额。
为实现上述需求,原本采用笛卡尔集的形式,详细SQL如下:
#统计首月投资金额SELECTC.INVESTOR AS INVEST,SUM(C.INVESTAMOUNT) AS F_M_INVESTAMOUNT,C.FLAGFROM(SELECTB.*, A.*FROMDW_ODS.ODS_HZCF_T_INVEST AS B,(SELECTINVESTOR AS MININVESTOR,MIN(DATE_FORMAT(INVESTTIME, '%Y%m')) AS MINTIME,FLAG AS MINFLAGFROMDW_ODS.ODS_HZCF_T_INVESTGROUP BYMININVESTORHAVINGMINFLAG = '30007001002') AS A) AS CWHEREC.INVESTOR = C.MININVESTORAND DATE_FORMAT(INVESTTIME, '%Y%m') = C.MINTIMEGROUP BYINVESTORHAVINGC.FLAG = '30007001002';
这样做的话非常非常非常非常慢。因此,需要对SQL进行优化。采用什么方式进行优化呐?答:临时表。详见下面的SQL:
#统计首月投资金额DROP table TEM_1;CREATE TEMPORARY TABLE TEM_1 SELECTINVESTOR AS MININVESTOR,MIN(DATE_FORMAT(INVESTTIME, '%Y%m')) AS MINTIME,FLAG AS MINFLAGFROMDW_ODS.ODS_HZCF_T_INVESTGROUP BYMININVESTORHAVINGMINFLAG = '30007001002';SELECTC.INVESTOR,C.INVESTAMt AS FIRST_MONTH_INVEST_MONEY,C.INVESTTIMEFROM(SELECTINVESTOR,INVESTTIME,SUM(INVESTAMOUNT) AS INVESTAMtFROMDW_ODS.ODS_HZCF_T_INVEST AS AJOIN TEM_1 AS B ON A.INVESTOR = B.MININVESTORAND A.FLAG = '30007001002'AND DATE_FORMAT(A.INVESTTIME, '%Y%m') = B.MINTIMEGROUP BYA.INVESTOR) AS CGROUP BY C.INVESTOR;结语:优化后的SQL执行起来要比原来的SQL快N倍,因此,对表里的数据进行统计时,尽量别用笛卡尔集。
0 1
- 优化SQL脚本—求所有投资人首月投资金额
- MySQL求投资人在第二次投资所在的那个月的所有投资金额
- 投资速度对天使投资人很重要——九合创投王啸
- SQL 脚本优化
- 关于SQL脚本优化
- sql脚本优化
- SQL备份所有数据库脚本
- PowerDesigner导出所有SQL脚本
- SQL备份所有数据库脚本
- Oracle SQL优化 求指教?????????????????????
- T-SQL脚本优化技巧
- 中国互联网著名天使投资人及投资领域
- 美国知名投资人愿意投资的30大创意方向
- 天使投资人周哲:天使投资-为什么要找我
- 一个中国投资人如何玩转硅谷早期投资“游戏规则
- 作为投资人,我的两次投资失败经历
- sql 脚本-- 变量所有表进行操作
- SQL清除所有数据库日志脚本
- vs2010调用python的方法
- Android 身份证、车牌号验证工具类
- 关于emjoy表情在android5.x以上系统触发jni错误的修改(基于cocos2dx2.1.5修改)
- OIO和NIO区别
- Swift中宏#define的替代方案
- 优化SQL脚本—求所有投资人首月投资金额
- Mybatis中查询的参数为Map条件中是in 数据组参数
- 集群和负载均衡和分布式
- C#界面设计之复选按钮与单选按钮的使用实例
- saleae逻辑分析仪使用分享
- 媒体查询参数设置详解
- Android之NDK开发
- POJ 1167 The Buses
- Thrift