我有三個表:如何將行從一個表移動到另一個表中不存在的行中?
grade (grade_id, grade_value, grade_date) ~100M rows
grade_archive (grade_id, grade_value, grade_date) 0 rows
peer_review (grade_id, peer_review_value, peer_review_date) ~10M rows
我想所有行從表grade
移動到grade_archive
這一個多月的老年人和未列入表peer_review
。
這些表被積極使用,因此任何插入都必須低優先級,以避免在運行時中斷現有和新進程。
預計表格行看起來應該像這樣做的時候:
grade ~10M rows
grade_archive ~90M rows
peer_review ~10M rows
我想這對一些接近:
INSERT
LOW_PRIORITY
INTO grade_archive
(grade_id,grade_value,grade_date)
SELECT
grade_id,grade_value,grade_date
FROM
grade
WHERE
grade_date < DATE_ADD(NOW(), INTERVAL -1 MONTH)
AND grade_id NOT IN
(
SELECT grade_id FROM peer_review
);
然後通過在檔案中刪除所有行清理grade
表表格:
DELETE LOW_PRIORITY FROM grade WHERE grade_id IN (SELECT grade_id FROM grade_archive);
但是這些子選項非常慢w大桌子,我對結果很緊張。尋找更好的方向。
有關等級表上的peer_review_flag的好主意。如果我補充說,我是否會跳過上面的連接並按照書面進行,還是有更快的方法? – Ryan 2015-03-02 19:38:33
在這種情況下,您可以僅替換與peer_review表和相關連接/子查詢相關的條件,以支持grade和grade_old表中的條件。在閱讀你的問題時,我完全不瞭解peer_review表的必要性。您在每個表格的行周圍提供的數字似乎表明在等級和peer_review表之間存在一對一的關係。如果是這種情況,那麼建議您最好將同行評議專欄添加到成績表上,以使一切變得更簡單。 – 2015-03-02 19:42:10