👌1000w条数据插入mysql如何设计?
1. 使用批量插入(Bulk Insert)
批量插入可以显著减少 SQL 语句的开销和网络传输的负担。可以使用INSERT INTO ... VALUES
语句一次插入多条记录。
示例:
1 | INSERT INTO your_table (column1, column2, column3) VALUES |
2. 禁用或延迟索引和约束(不到万不得已,别搞,不推荐)
在插入大量数据之前,可以暂时禁用或延迟索引和外键约束,以减少插入过程中的开销。插入完成后再重新启用索引和约束。
禁用外键检查:
1 | SET foreign_key_checks =0; |
禁用唯一检查:
1 | SET unique_checks =0; |
3. 调整 MySQL 配置
确保 MySQL 配置足够支持大批量数据插入。
增大缓冲区大小:
1 | [mysqld] |
调整事务日志大小:
1 | [mysqld] |
4. 使用事务
将大量插入操作分批放入事务中,可以减少每次插入的提交开销。如果数据量非常大,可以每 1000 或 10000 条记录提交一次。换成代码使用就是 transactiontemplate来手动控制事务提交
示例:
1 | START TRANSACTION; |
5. 使用分区表
如果数据量非常大且有分区需求,可以考虑使用 MySQL 的分区表功能,将数据按某个字段(如日期、ID 等)进行分区,提升查询和插入性能。
6. 数据导入工具
对于非常大的数据集,可以使用 MySQL 提供的工具如mysqlimport
或者第三方工具如mydumper/myloader
进行数据导入,这些工具通常针对大数据集做了优化。