[英]MySQL slow copy from one to another table
我使用以下語句將文件從一個數據庫復制到另一個數據庫:
INSERT INTO database1.table Select ... FROM database2.table
它工作得很好,但真的很慢。 對於400,000個數據庫(大約600mb),我花了幾個小時。
我正在使用MyISAM表來完成它。
我的主鍵是一個唯一的標識符,它是由不同的數據字段構建的。
我可以通過添加一個使用唯一標識符的新列來加快復制過程,假設一個整數從1開始並轉到最后一行並使其成為AUTO_INCREMENT,復制文件時它也會上升嗎? 或者可能在新列上設置索引?
如果你能幫助我加快復制過程,我真的很開心。
從一張桌子到另一張桌子的復制速度在很大程度上取決於很多東西,因此很難給出一個“這就是答案”。
脫離我的頭腦這里有一些可能是問題的事情:
我使用過包含數十億行的數據庫。 當我不得不進行批量插入或批量復制時,索引是一個巨大的性能損失。 你沒有向我們展示表格的結構,但應該認真研究上面的#2。
第1步:如果可以,請停止使用糟糕的MyISAM引擎。 讀取速度非常快,但寫入性能可能很殘酷,並且通常整個表都會被鎖定以保持一致性,因為不支持事務。 InnoDB可以更好地處理並發寫入,並且具有記錄的額外好處,因此如果您的服務器沒有正確關閉,您的表不太可能完全被破壞。
步驟2:禁用目標表上的索引,或延遲創建它們,直到插入數據為止。 更新索引會增加大量開銷。 你這樣做是一次性插入,因此懲罰較低,但仍然不為零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.