mysql批量添加大量数据

本文介绍了一个使用存储过程批量插入数据库记录的方法,通过一个具体的例子展示了如何在MySQL中创建存储过程来实现这一操作,特别适用于需要大量数据插入的场景。

CREATE PROCEDURE add_driver_position(IN n int)
BEGIN
DECLARE i INT DEFAULT 1;
while i<n do
insert INTO t_driver_position(uuid,company_id,version_no,license_id,address,vehicle_no,position_time,longgitude,latitude,encrypt,direction,speed,biz_status,order_id,status,
city_status,create_time,update_time,position_type
)
values(900000+i,‘3201NJLXPJXB’,‘1’,‘320114198110242735’,‘320100’,‘AD71833’,‘1576540612’,‘118756338’,‘32046296’,‘1’,‘232’,‘20’,‘1’,‘KC120191217074100292’,‘0’,‘0’,‘1576540612’,‘1576540612’,‘AUTO’);
set i=i+1;
end while;
end

### 关于 MySQL 批量插入大量数据的最佳实践 在实际生产环境中,当需要向 MySQL 数据库中插入大量数据时,采用高效的批量插入方法能够显著提升性能并减少资源消耗。以下是针对此场景的一些最佳实践: #### 1. 使用 `INSERT ... VALUES` 的批量语法 MySQL 支持通过单条 `INSERT` 语句插入多行记录,这种方式相较于逐条插入能大幅降低网络开销和事务管理成本。例如: ```sql INSERT INTO table_name (column1, column2) VALUES (value1_1, value1_2), (value2_1, value2_2), ...; ``` 这种方法允许一次性提交多组数据数据库服务器,从而减少了客户端与服务端之间的交互次数[^1]。 #### 2. 调整 InnoDB 缓冲池配置 对于基于 InnoDB 存储引擎的应用程序来说,调整缓冲区大小(如 innodb_buffer_pool_size)可以改善磁盘 I/O 性能。较大的缓冲池意味着更多的数据可以在内存中被缓存而不是频繁访问硬盘文件系统,这对于大规模的数据加载尤其重要[^2]。 #### 3. 利用临时表进行预处理后再迁移至目标表 如果源数据非常庞大或者结构复杂,则先将其导入到一个专门创建用于中间计算过程的TEMPORARY TABLE里做必要的转换清洗等工作之后再转移到最终的目的地正式业务表当中去。这样不仅可以简化主流程逻辑而且还能有效控制整个作业期间可能产生的锁竞争等问题[^1]。 #### 4. 禁用外键约束检查(Foreign Key Checks) 在外键关系存在的情况下,默认情况下每次新增都会触发额外验证动作来确认关联对象是否存在合法状态等条件满足与否;但如果事先已经确信所准备好的待载入资料集内部相互之间没有任何违反这些规则的情况发生的话那么就可以暂时关闭这项功能以便加快速度完成整体任务进度安排如下所示命令形式即可实现该目的效果明显优于保持开启状态下继续操作下去。 ```sql SET foreign_key_checks = 0; -- 开始前禁用 -- 进行大批次插入... SET foreign_key_checks = 1; -- 结束后恢复启用 ``` #### 5. 控制每批提交的数量(Batch Size Optimization) 虽然理论上讲越少分次越好因为那样才能最大限度发挥硬件潜能但是考虑到现实世界里的各种不确定因素比如突然断电事故或者其他意外状况所以还是推荐合理规划好具体数值范围内的循环执行机制比较稳妥可靠一些通常建议设置成几百至上千级别左右为宜取决于具体情况而定当然也可以动态调节参数适应不同阶段需求变化情况作出相应调整措施加以应对解决办法多样化灵活运用才是王道[^2]。 #### 6. 合理使用延迟索引更新(Delayed Index Updates) 某些版本下的 MyISAM 类型支持选项 DELAY_KEY_WRITE ,它可以推迟直到最后才统一刷新所有更改过的二级索引节点位置信息回到物理介质上去保存起来因此在整个过程中间就不会有那么多即时同步负担累加在一起影响效率表现了不过需要注意的是只有非唯一性的普通类型才可以享受此项福利待遇哦[^1]! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值