Mysql 插入大量数据

使用字符串拼接SQL,执行一次,效率更高。

$db = new PDO("mysql:host=;dbname=","","");
$sql = "INSERT INTO `table` () VALUES ";

foreach($arr as $k){
   $sql .= "";
}
$sql = substr($sql,0,strlen($sql)-1);
$db->exec($sql);

在执行脚本处理时,可能需要设置PHP内存和MySQL接受的包大小

1.设置PHP内存

ini_get('memory_limit'); //查看当前设置的内存
ini_set('memory_limit','1024M');   //设置内存限制

2.设置MySQL接受的包大小
MySQL根据配置文件会限制Server接受的数据包大小。有时候大的插入和更新会受 max_allowed_packet 参数限制,导致大数据写入或者更新失败。

查询max_allowed_packet

select @@max_allowed_packet;
show variables like 'max_allowed_packet';

mysql>  select @@max_allowed_packet;
+----------------------+
| @@max_allowed_packet |
+----------------------+
|             16777216 |
+----------------------+
1 row in set (0.00 sec)

修改方法1:
修改my.cnf

[mysqld]
max_allowed_packet = 100M

修改方法2:

mysql> set global max_allowed_packet = 100 * 1024 * 1024;

临时修改,mysql重启后失效

你可能感兴趣的:(Mysql 插入大量数据)