iT邦幫忙

0

請教Oracle大Table的規劃方式(PARTITION OR 切成好多小TABLE)

大家好,

想請教一個大Table的規劃方式.

客戶的銷售資料庫的Table越長越大,常常需要用IDN去分析客戶的消費行為.隨的時間推移,
系統執行批次的時間越跑越慢.

我想到兩種方式,只是不知道成效如何?
方案1.用IDN的第一碼去建RANGE PARTITION:這樣切就是26個PARTITION(A.B.C...Z PARTITION)
方案2.把這個大TABLE用IDN第一碼切成幾個TABLE(EX:TABLE1是IDN開頭為A,B,C的資料 TABLE2是IDN開頭為D,E,F的資料...)

想說大部分都是用IDN當條件來做銷售分析跟查詢,以上兩種方式,有沒有人試過?

寫程式時我知道方案2比較麻煩,INSERT/SELECT資料時都要先判斷是哪個IDN開頭,來決定讀哪個TABLE,如果統計報表不分IDN的話,要UNION一堆TABLE,這樣效能會比原來一個大TABLE慢?

方案1在做INSERT/SELECT,雖不用作判斷,如果跑的統計報表,不分IDN跨PARTITION抓資料,是不是也會比原來一個大TABLE來的慢?

不知道上述兩種方案,有沒有人可以分享這方面的經驗供參考.

~多謝

1 個回答

0
fuzzylee1688
iT邦新手 1 級 ‧ 2019-05-17 15:56:14

建議用銷售日期切 YYYYMM PARTITION table, 再配合IDN等常用where條件欄位做loacl parttion index, 會更有效率的.

brucechn iT邦新手 5 級 ‧ 2019-05-17 16:28:51 檢舉

但我們大多是某個人的銷售資料,從以前到現在要全看?

這樣切,會不會變成要看某個人的銷售資料,變成要撈所有partition

是呀. 但這樣分析客戶銷售歷史才能用MPP查詢方式查詢, 用YYYYMM切partition,你會比較好做ETL維運.

我要發表回答

立即登入回答