萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL INSERT INTO SELECT 大量資料複製效能實測

INSERT INTO ... SELECT 是 MySQL 表間大量資料複製的標準寫法。本文透過實測展示從 12 筆資料指數級增長至 314 萬筆的耗時變化,並說明適用場景與注意事項。

測試環境與表結構

  • Ubuntu 14.04 LTS 64-bit + XAMPP
  • 來源表 user、目標表 user_his,欄位含 id(PK)、username、password

複製語句

INSERT INTO `user_his`(`id`,`username`,`password`)
SELECT `id`,`username`,`password` FROM `user`;

效能實測數據(指數增長模式)

資料筆數耗時備註
12 ~ 3,0720.07 ~ 0.17 秒極快
6,144 ~ 24,5760.28 ~ 0.99 秒線性增長
49,152 ~ 196,6081.98 ~ 8.89 秒開始明顯
393,216 ~ 786,43217 ~ 38 秒倍數增長
1,572,864 ~ 3,145,7281 分 11 秒 ~ 2 分 29 秒千萬級瓶頸

結論與建議

  • 百萬級以內資料,INSERT INTO SELECT 表現良好;
  • 千萬級以上建議分批次處理、調大 innodb_buffer_pool_size、或使用 LOAD DATA INFILE 配合 SELECT ... INTO OUTFILE 雙管齊下;
  • 注意:若目標表有唯一索引/主鍵衝突會報錯,需配合 IGNORE 或 ON DUPLICATE KEY UPDATE。
copyright © 萬盛學電腦網 all rights reserved