2015年3月19日 星期四

[DB] Teradata SQL最佳化教學(二)-- 減少大型SQL語句


前一篇談的是SQL和INDEX的優化方式,接下來是指縮減大型的SQL語句.一般寫程式會盡量把步驟在一個SQL裡面做完,但是TERADATA在運作上,由於會運用Spool暫存SQL運行產生的表格,加上資料量又大,如果SQL語句太複雜,將會把Spool吃滿,反而增加運行時間,這時候,可以參考這篇文章的策略,將SQL語句簡化.



Reducing Large SQL’s :                                         

1) Table denormalization: Table的去正規化處理,將資料複製到其他的資料表.這樣可以加速存取的時間,但是會增加更新的時間.

2) Table summarization: 可以將常用的資料從單一/多個資料表整理成摘要的表格.可以加速存取這些摘要後的資料,不過也會增加更新資料的時間.

3) SQL union: 使用Union.Union可以將大型的SQL步驟拆成幾個比較小的部分,這些小部分可以平行運行.

4) Unix split: 分割輸入的資料.大的unix檔案可以分割成幾個小檔,可以使用連續或是平行的方式被讀入,來產生比較小的SQL處理步驟.

5) Unix concatenation: 大的查詢語句可以拆成幾個小的獨立的查詢,個別的輸出可以寫入幾個比較小的unix檔.這些小檔可以結合在一起成為單一的unix檔案.

6) Trigger tables: 有一組資料表,這些資料表內含了一個原始表格中的index鍵值的子集合.這些資料表可以根據原始表格中的某些index值建立起來.這一個大型的SQL語句可以拆成多個小的SQL,不過產生那些trigger table會需要比較多時間.

7) Sorts (order by): 排序總是費時,而且排序時間直接的受到查詢結果影響(排序會發生在查詢結束前).必須限制非必要的排序.

8) Export/Load: 表格可以輸出(Bteq, Fastexpoprt)成unix檔,而且可以更新,重新載入成資料表格(Bteq,fastload,Multiload)

9) C PROGRAM/UNIX SCRIPTS: 有些資料使用SQL操作非常困難且耗時.可以改成用c/ unix script來處理.



沒有留言:

張貼留言