PHP大数组下,避免Mysql逐条执行,可以分批执行,提高代码效率
博客专区 > let 的博客 > 博客详情
PHP大数组下,避免Mysql逐条执行,可以分批执行,提高代码效率
let 发表于4年前
PHP大数组下,避免Mysql逐条执行,可以分批执行,提高代码效率
  • 发表于 4年前
  • 阅读 899
  • 收藏 4
  • 点赞 1
  • 评论 4

标题:腾讯云 新注册用户域名抢购1元起>>>   

function insertBatch($table, $keys, $values, $type = 'INSERT'){
	$tempArray = array();
	foreach($values as $value){
		$tempArray[] = implode('\', \'', $value);
	}
	return $type.' INTO `'.$table.'` (`'.implode('`, `', $keys).'`) VALUES (\''.implode('), (', $tempArray).'\')';
}

$splitNum = 5;
$data = array(array('a', '1'), array('b', '2'), array('c', '3'), array('d', '4'), array('e', '5'), array('f', '6'), array('g', '7'), array('h', '8'));

foreach(array_chunk($data, $splitNum) as $values){
	echo insertBatch('table', array('字段A', '字段B'), $values);
	echo '<br>';
}
//http://my.oschina.net/cart/
exit();

这将输出:

INSERT INTO `table` (`字段A`, `字段B`) VALUES ('a', '1), (b', '2), (c', '3), (d', '4), (e', '5')
INSERT INTO `table` (`字段A`, `字段B`) VALUES ('f', '6), (g', '7), (h', '8')
完毕!

上面,你可以适当调整$splitNum的大小,比如调整为50,只要你的内存、bulk_insert_buffer_sizemax_allowed_packet足够大,这点数值也可以调整为1000,这样,就是1000条记录分为1次提交到数据库,SQL插入速度立马杠杠上升的!

共有 人打赏支持
粉丝 137
博文 66
码字总数 75584
评论 (4)
豪情
给力。
let

引用来自“豪情”的评论

给力。

thanks
海子的海
顶 顶
海子的海
顶 顶 1
×
let
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: