萬盛學電腦網

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

MySQL 批量倍增測試資料:INSERT ... SELECT 秒級構建大量數據

核心語句

INSERT INTO target_table (col1, col2, ...)
SELECT col1, col2, ... FROM target_table;

每次執行資料量翻倍(2^n),極快構建測試資料集。

實戰演示

批量倍增效果圖

主鍵為自增時的寫法

INSERT INTO t1 (col1, col2, col3)
SELECT col1, col2, col3 FROM t1;
-- 不指定自增主鍵 id,MySQL 自動分配

進階:控制增長倍數與條件

-- 僅複製符合條件的行
INSERT INTO t1 (a,b) SELECT a,b FROM t1 WHERE created_at > '2024-01-01';

-- 複製並修改某欄位
INSERT INTO t1 (a,b,c) SELECT a, b, CONCAT(c,'_copy') FROM t1;

-- 限制複製行數
INSERT INTO t1 (a,b) SELECT a,b FROM t1 LIMIT 10000;

效能優勢

  • 純 Server 端操作,無網路往返,無客戶端解析開銷。
  • 單條 SQL 完成數萬/數十萬行寫入,利用批次提交、減少日誌刷盤(配合 innodb_flush_log_at_trx_commit=2 更快)。
  • 配合 /*+ MAX_EXECUTION_TIME(1000) */ 防止長鎖表(MySQL 8.0+)。

注意事項

  • 自增主鍵會產生空洞(複製時不指定 id),不影響業務但需知悉。
  • 外鍵、觸發器、唯一索引會增加開銷,大批量時可暫時禁用(SET FOREIGN_KEY_CHECKS=0 等)。
  • 二進制日誌會記錄每行變更,大量寫入導致 Binlog 膨脹,備份/同步需評估。
copyright © 萬盛學電腦網 all rights reserved