You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含唯一字段的300万级数据表批量增量插入方案咨询

当然可以实现!针对你的场景,有高效的批量解决方案

首先要确认的核心前提:你的c_document字段必须已经设置了唯一约束(UNIQUE KEY)——这是数据库能自动判断“记录是否存在”的基础,要是还没加,先执行这条SQL(以MySQL为例,其他数据库语法类似):

ALTER TABLE your_existing_table ADD UNIQUE KEY idx_unique_document (c_document);

下面针对主流数据库给出具体的批量操作方案,完全支持处理500MB级别的数据,而且不会删除现有记录:

MySQL/MariaDB 方案

最简洁的方式是用INSERT IGNORE,它会自动跳过违反唯一约束的记录(也就是已存在的c_document):

如果更新数据在临时表(比如new_records)里

INSERT IGNORE INTO your_existing_table 
(c_id, c_laname, c_mname, c_fname, c_document, c_email, c_dob)
SELECT c_id, c_laname, c_mname, c_fname, c_document, c_email, c_dob
FROM new_records;

如果是直接导入500MB的SQL文件

你可以打开SQL文件,把所有INSERT INTO替换成INSERT IGNORE INTO,然后用MySQL命令行工具导入(比GUI稳定):

mysql -u your_username -p your_database < your_update_file.sql

PostgreSQL 方案

PostgreSQL提供了专门的冲突处理语法ON CONFLICT DO NOTHING,逻辑清晰且高效:

INSERT INTO your_existing_table 
(c_id, c_laname, c_mname, c_fname, c_document, c_email, c_dob)
SELECT c_id, c_laname, c_mname, c_fname, c_document, c_email, c_dob
FROM new_records
ON CONFLICT (c_document) DO NOTHING;

如果是导入SQL文件,同样可以把单条INSERT改成批量形式,或者用psql命令行导入,记得加事务提升速度。

SQL Server 方案

可以用MERGE语句,或者更直观的INSERT + NOT EXISTS:

方式1:MERGE(推荐,逻辑更清晰)

MERGE INTO your_existing_table AS target
USING (SELECT c_id, c_laname, c_mname, c_fname, c_document, c_email, c_dob FROM new_records) AS source
ON target.c_document = source.c_document
WHEN NOT MATCHED THEN
    INSERT (c_id, c_laname, c_mname, c_fname, c_document, c_email, c_dob)
    VALUES (source.c_id, source.c_laname, source.c_mname, source.c_fname, source.c_document, source.c_email, source.c_dob);

方式2:INSERT + NOT EXISTS

INSERT INTO your_existing_table 
(c_id, c_laname, c_mname, c_fname, c_document, c_email, c_dob)
SELECT c_id, c_laname, c_mname, c_fname, c_document, c_email, c_dob
FROM new_records AS source
WHERE NOT EXISTS (
    SELECT 1 FROM your_existing_table AS target
    WHERE target.c_document = source.c_document
);

通用优化建议(针对大文件导入)

  • 用命令行工具导入:别用GUI工具,mysql、psql、sqlcmd这些原生工具处理大文件更稳定,速度也更快
  • 批量插入+事务:把SQL文件里的单条INSERT合并成批量(比如一次插1000条),并且用事务包裹整个导入操作,减少磁盘IO开销
  • 临时禁用非唯一索引:导入前先禁用表上的非唯一索引,导入完成后再重建,能大幅提升导入速度
  • 优先用批量加载工具:如果更新数据是CSV/TSV格式,别用SQL插入,用LOAD DATA(MySQL)、COPY(PostgreSQL)、BULK INSERT(SQL Server),速度能快几倍甚至几十倍

最后提醒:先在测试环境用小批量数据验证逻辑,确认不会误改现有数据后,再在生产环境执行哦!

内容的提问来源于stack exchange,提问作者COINFEUROPEA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:43:11