开发随笔——数据库插入优化

随笔背景

项目需要读取一个文件(大约2w~10w行),将每一行处理后存储在mysql数据库中。
但是插入操作执行非常慢(大约每秒20条)
原始代码

while(!feof($f)){
		$text=fgetcsv($f);
		if($text!=array()){
				$content=array(
					//略
				};
				$this->db->insert('`'.$table_name.'`',$content);
		}
}

解决方法

利用数据库事务处理
MySQL 事务主要用于处理操作量大,复杂度高的数据。
1、在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
2、事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
3、事务用来管理 insert,update,delete 语句
使用事务处理将多条insert包装成一个事务,同一处理。

优化代码

$i=0;
$this->db->query('BEGIN');
while(!feof($f)){
		$text=fgetcsv($f);
		if($text!=array()){
				$content=array(
					//略
				);
				$this->db->insert('`'.$table_name.'`',$content);
		}
		$i++;
		if($i%3000==0){
				$this->db->query('COMMIT');
				$this->db->query('BEGIN');
		}
}
$this->db->query('COMMIT');		

最终处理2w条数据只用了4秒,巨大成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值