优化数据库插入效率通常可以从SQL写法、批量处理、事务控制、表结构、数据库配置、硬件/架构几个层面入手。下面按“由易到难、由常见到进阶”的方式说明。
❌ 低效:
INSERT INTO user(name) VALUES ('a');
INSERT INTO user(name) VALUES ('b');
✅ 高效:
INSERT INTO user(name) VALUES ('a'), ('b'), ('c');
不同数据库写法略有差异:
VALUES (), ()INSERT ALL❌:
insert → commit
insert → commit
✅:
begin
insert × 1000
commit
事务过多会频繁刷盘,严重影响性能。
binlog / redo 写入压力(如 MySQL 可调整 innodb_flush_log_at_trx_commit)示例(MySQL):
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
⚠️ 仅适合数据迁移/初始化,不建议生产常态使用。
TEXT / BLOB 过多INT 而非 BIGINT)LOAD DATA INFILECOPYSQL*Loader示例(MySQL):
LOAD DATA INFILE 'data.csv'
INTO TABLE user
FIELDS TERMINATED BY ',';
这比 INSERT 快几个数量级。
innodb_buffer_pool_size = 70%内存
innodb_log_file_size = 大一些
innodb_flush_log_at_trx_commit = 2(非强一致场景)
| 优化点 | 效果 |
|---|---|
| 批量 INSERT | ⭐⭐⭐⭐⭐ |
| 合理事务 | ⭐⭐⭐⭐ |
| 减少索引 | ⭐⭐⭐⭐ |
| LOAD/COPY | ⭐⭐⭐⭐⭐ |
| 参数调优 | ⭐⭐⭐ |
| 架构拆分 | ⭐⭐⭐⭐ |
如果你能告诉我:
我可以直接给你可执行的优化方案或示例脚本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。