Re: [SQL ] insert TB1 to TB2的問題

看板Database (資料庫)作者 (打屁猴)時間8年前 (2016/04/24 17:18), 8年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《renmax (竹科學友哥)》之銘言: : 各位版友好 學友哥你好 : 有兩個Table1和Table2如下: : Table1 Table2 : id daily_points id SUM_point : ---------------------- -------------------- : 1 55 1 : 2 66 2 : 3 77 3 : 1 11 4 : 2 22 5 : 3 33 6 : 現在想把Table1相同id的daily_points都相加起來 : 接著丟到Table2的SUM_point (兩個Table的id是相同的) : 因此得到的結果如下: : Table2 : id SUM_point : -------------------- : 1 66 : 2 88 : 3 110 : 4 0 : 5 0 : 6 0 : 請問語法該怎麼下會比較恰當呢? : 麻煩了,謝謝 我覺得這個問題可大可小,看你的需求。 首先,如果你Table1的資料量不大,其實你不需要Table2, 當你的前端或application level需要summary data的時候,直接從Table1撈就好 select id, sum(daily_point) as SUM_point from Table1 group by id 但是如果你的資料量很大,直接從Table1撈會很花時間的話, 才需要考慮用Table2來存summary data。 這時候問題就會變得比較富雜,因為你需要考慮做summarize的頻率, 也許要寫個schedaule job來做summarize,然後考慮2種summarize的作法: A. 每次做summarize的時候總是truncate Table2, 然後再把Table1的所有data都summrize到Table2過去 B. 不truncate Table2,每次做summarize的時候必須有watermark, 來紀錄Table1上次summarize到哪一筆,然後再判斷要insert還是update Table2 2個方法各有優缺點, 方法A:比較簡單,但是會在truncate Table2之後,insert Table2之前 會有一個瞬間,前端或application會撈不到Table2中的資料。 (會需要其他方法來解決這個問題,比方說用2個Table2,前端撈data時再switch) 方法B:比較複雜,速度會比較慢。 你必須考慮watermark的機制以及一次做summarize的batch size。 並且處理以下各種scenario: 1. 當要summarize Table1,但Table1中沒有資料新增時。 2. 當有人truncate Table1後,要記得reset watermark。 3. 當id已存在Table2中時要update,當id不存在Table2中時要insert。 4. 當Table1有新的資料進來,但schedule summarize到Table2的時間還沒到 會造成UI呈現Table1和Table2中的data不sync。 5. 當資料量大到需要對Table1做purge時,必須同時考慮purge Table2, 必須考慮同時purge Table2,以免造成Table1和Table2的data不sync... 要使用哪個方法就看你的資料量和需求囉 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.214.56 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1461489492.A.D31.html ※ 編輯: chatmonkey (59.115.214.56), 04/24/2016 17:20:52
文章代碼(AID): #1N78zKqn (Database)
討論串 (同標題文章)
文章代碼(AID): #1N78zKqn (Database)