統計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 的語句,不能加入優化方法里的參數,優化的方法用不上。