优化数据库插入(INSERT)速度通常可以从SQL写法、批量处理、表结构、数据库配置、硬件/架构几个层面入手。下面按“实用优先级”给你一套清单。
❌ 单条插入:
INSERT INTO t VALUES (1,'a');
INSERT INTO t VALUES (2,'b');
✅ 批量插入:
INSERT INTO t VALUES
(1,'a'),
(2,'b'),
(3,'c');
一般 一次 500~1000 行 比较均衡(视字段大小和 DB 而定)。
Java / Python / Go 都支持 executeMany
❌ 每条都 commit
insert → commit
insert → commit
✅ 批量 commit
begin
insert x1000
commit
⚠ 注意:事务太大可能导致 undo/redo 爆掉
ALTER TABLE t DISABLE KEYS; -- MySQL(MyISAM)
-- 或
DROP INDEX idx_xxx;
-- 插入完成后再建索引
CREATE INDEX ...
对 InnoDB 效果有限,但仍建议:
SET FOREIGN_KEY_CHECKS=0;
PostgreSQL
COPY t FROM '/data/file.csv' WITH (FORMAT csv);
MySQL
LOAD DATA INFILE '/data/file.csv' INTO TABLE t;
这是最快的入库方式,比 INSERT 快 10~100 倍。
innodb_flush_log_at_trx_commit = 2
sync_binlog = 0
innodb_buffer_pool_size = 70% RAM
⚠ 会牺牲一定安全性,仅适合“可重跑数据”
| 优化手段 | 提速效果 |
|---|---|
| 批量 INSERT | ⭐⭐⭐⭐⭐ |
| 事务合并 | ⭐⭐⭐⭐ |
| LOAD / COPY | ⭐⭐⭐⭐⭐ |
| 去索引 | ⭐⭐⭐ |
| 多线程 | ⭐⭐⭐⭐ |
| 参数调优 | ⭐⭐ |
你可以告诉我:
我可以直接给你针对你场景的插入方案或示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。