“批量插入”常见于数据库(MySQL、PostgreSQL、Oracle、MongoDB 等)或文件/消息写入场景。下面从通用原则 → 不同数据库示例 → 常见坑给你一套可落地的优化思路。
❌ 一条一条插
✅ 一次插入多条(单条 SQL 多值 / 批量 API)
commitautocommit = false
INSERT INTO user (name, age)
VALUES
('a', 1),
('b', 2),
('c', 3);
优化建议
PreparedStatement + addBatch()autocommitSET autocommit=0;
-- 插入
COMMIT;
INSERT INTO user (name, age)
VALUES
('a', 1),
('b', 2);
或 COPY(最快):
COPY user(name, age) FROM '/data.csv' WITH CSV;
INSERT ALL
INTO t VALUES (1, 'a')
INTO t VALUES (2, 'b')
SELECT 1 FROM dual;
或使用:
PreparedStatement.addBatch()SqlLoaderdb.users.insertMany([
{ name: "a" },
{ name: "b" }
]);
优化:
insertMany{ w: 0 }
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement(
"INSERT INTO user(name, age) VALUES(?, ?)"
);
for (User u : list) {
ps.setString(1, u.name);
ps.setInt(2, u.age);
ps.addBatch();
if (++count % 1000 == 0) {
ps.executeBatch();
}
}
ps.executeBatch();
conn.commit();
| 问题 | 原因 | 解决 |
|---|---|---|
| 插入慢 | 每行一个事务 | 批量提交 |
| CPU 高 | 索引太多 | 先插后建 |
| 锁等待 | 批次太大 | 减小批次 |
| 内存 OOM | List 太大 | 流式 / 分批 |
你可以告诉我:
我可以直接给你可抄的优化方案或代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。