php - MySqli 插入海量数据

标签 php mysql nginx mysqli prepared-statement

我正在编写一个 PHP 脚本,它将向表中大量插入数据。

我正在使用这样的准备语句:

$sql = "INSERT INTO clans(id, clanid, name, badge, status, playercount, score, requiredtrophies, warswon, warslost, warstied, location,warfrequency, exp, level, description, playerjson, lastupdate)
            VALUES ('', ?, ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?, ?, ?, ?, now())";
$stmt = $con->prepare($sql); //prepare update statement

$stmt->bind_param('ssisiiiiiissiiss',$clanid,$name,$badge,$status,$playercount,$score,$requiredtrophies,$warswon,$warslost,$warstied,$location,$warfrequency,$exp,$level,$description,$playerarray);

之后我有一个 while 循环将执行大量查询(数十万甚至几百万!)并且其中的数据非常大! playerjson 是一个巨大的 json 数组。

数据将从网站 API 的 JSON 响应中接收。

我查看了事务,但它们以 502 Bad Gateway 告终,我认为这是因为内存中的数据过多。这不是超时问题,因为我在 nginx 和 ini_set

中处理了它们

那么批量插入大量数据最快的方法是什么?

最佳答案

最快的方法是 LOAD DATA INFILE。考虑创建一个文件!

但是在你的情况下创建一个临时表

create table clans_temp like clans;

并插入其中。然后在一个查询中更新原始表并删除临时表。

据我所知,考虑到问题的限制,这是最快的方法。

关于php - MySqli 插入海量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33347452/

相关文章:

php - 在没有Apache的情况下将php作为服务器运行

javascript - 将mqtt转换结果插入mysql

php - 两个查询,两个不同的表,只有一个循环

php - Drupal 表单重定向到片段

ruby-on-rails - 在 Rails 应用程序上运行 ruby​​ 时出现问题

nginx - 无法连接到 EC2 实例中部署的 nginx 服务器

php - 将复杂查询分解为 MYSQL 中的临时表

mysql - count(*) over() MSSQL 到 Mysql

mysql - MySQL View 的自动递增序列号

带有 BLOB 列的 MySQL 5.7 批量插入