有时候我们向数据库中添加记录时会遇到大批数据假如的情况,如果用insert和循环一次向数据库中写入来操作的话这样会
增加数据库连接次数严重影响数据库操作性能,tp5中有提供insertAll批量写入数据的方法可以依次写入大量的数据减少连接
次数,然而当数据量达到几万和几十万的时候insertAll方法写入数据会出现超时和sql过长的报错,超时是因为一次处理的数
据量过大内存处理不过来,sql过长是因为sql语句有限定最大长度超过后就会报错。
这里我们可以将数据分几次循环分批导入,用array_slice将数据分批次导入
注意:当用array_slice函数切分数据是一定要注意函数最后一个参数一定要为false部分insertAll导入在第二批数据以后会写入
失败,因为从第二批数据后key值不是从0自增的,tp5手册上也没有这方面的讲解
//保留原键值
$a = array_slice($arr,4,10,ture);
print_r($a);
结果输出如下:
Array( [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => fhksadhfj [10] => 19)
//重置键值
$a = array_slice($arr,4,10,false);
print_r($a);
结果输出如下:
Array( [0] => 5 [1] => 6 [2] => 7 [3] => 8 [4] => 9 [5] => fhksadhfj [6] => 19)