统计24小时的红包感知专题,有1.5亿行以上的数据,Nokia给出的方法是先按小时执行算法,再汇总各个小时的执行结果。
算法中包含了大量的 sum(case when)计算。
专题里有5个小节,执行计划的时候,需要跑5次where条件不同而查询列相同的sql,需要执行5次sum(case when),很耗时间。
统计一天24小时的数据,需要9个多小时才能计算完成。
--------------于是我想优化这个执行过程--------
我把每小时的数据case when的计算先执行,合并24小时各小时的case when 结果,然后再对合并的执行sum等计算。
发现select时速度很快,sum速度也快,5个小节,执行计划时只要执行一次case when,5次sum,按理速度应该会提高很大。
--------------没想到,现实不是这样的,居然还原来的快----------
找原因,发现问题在 create table xxxx as select 的性能问题
原来的方法虽然执行了5次sum(case when),很耗时间,但因为汇总了数据,create table 的表行数少,创建表的速度快。
-------------
优化后的方法,虽然select速度很快,但是创建表的行太多,24小时有1.5亿行+,这个表好大啊,create table xxxx as select 的执行耗时比上面的还要多。
于是我醉了,2天的优化,白弄了。
--------下文是create table as select 性能优化方法------
http://blog.csdn.net/yangzhijun_cau/article/details/7396088
可专题工具系统在代码里硬编码了create table as select 的语句,不能加入优化方法里的参数,优化的方法用不上。