我需要解決一個缺少主鍵的問題,我想獲得一些想法 最好的辦法做到這一點。聚合行和創建主鍵
我們有一個關於幾個生產數據庫的程序,我們將每個 小時的新數據插入到一個總和表中。五列是關鍵,其他列是 值是不同的總和。我們使用ON DUPLICATE KEY UPDATE在每個插入處添加 總和。插入語句看起來像這樣:
INSERT INTO sums (key1,key2,key3,key4,key5,sum1,sum2) VALUES (..., 13, 42, 3)
ON DUPLICATE KEY UPDATE sum1=VALUES(sum1)+sum1,sum2=VALUES(sum2)+sum2
事情是當表創建主鍵沒有設置(不是我的錯:)。 現在我需要聚合具有相同鍵的行,然後添加 主鍵。由於缺少主鍵,表在幾個系統上已增長到約 700 000 000行,所以我需要一些有效的方法來完成此操作。
我想這樣做,而不必推遲每 小時添加新行。因爲在現在系統工作的方式現在節省了插入,並且以後需要很多工作。
我做的每一個操作都不能鎖定表格45分鐘左右。 我希望創建實際主鍵的時間要短於如果我管理 先合併某些行。也許這是更快的創建一個索引 鍵列首先,所以我有一個索引用於聚合行操作?
我不確定聚合行的最佳方式是什麼。任何好的 建議將不勝感激。
按鍵1到5的任何一個按時間順序排列?這樣您可以識別在某個時間點之後添加的行嗎?在這種情況下,我會以塊的形式運行聚合查詢 - 首先是第一百萬行,然後是第二行等 - 然後將聚合結果複製到新表中。這可能足夠快,以便您不要將表格鎖定時間過長,並且您可以在不到45分鐘的時間內切換到最後一次運行後的新表格。 – 2012-08-08 12:39:24
是的,其中一個關鍵列是基於日期的。我想對於實際的合併,我需要通過大塊來完成。也許最好的開始方式是爲基於日期的列添加索引,並查看需要多長時間。我猜想建立一個索引的速度比同時使用所有鍵的索引要快一些。 – ygram 2012-08-08 12:44:59