MySQL插入1000万条数据,用PHP如何做才能保证性能的最优

发布时间 2023-08-08 09:30:21作者: 李留广
插入大量数据时,确保性能最优是很重要的。下面是几种在 PHP 中快速向 MySQL 插入大量数据的优化方案:使用多行插入:
最简单的方法是使用多行插入语句,将多条记录一次性插入到数据库。这比逐条插入要快得多,因为减少了连接和查询的开销。
$values = [];
for ($i = 0; $i < 10000000; $i++) {
    $values[] = "('$i', 'data')";
}

$valuesStr = implode(',', $values);
$query = "INSERT INTO your_table (column1, column2) VALUES $valuesStr";
mysqli_query($connection, $query);
使用预处理语句:
预处理语句可以减少 SQL 解析和编译的次数,从而提高性能。使用 mysqli 扩展的预处理功能。
$stmt = $connection->prepare("INSERT INTO your_table (column1, column2) VALUES (?, ?)");
for ($i = 0; $i < 10000000; $i++) {
   $stmt->bind_param("ss", $i, "data");
   $stmt->execute();
}

 

 

批量提交事务:
将插入操作放在一个事务中,然后批量提交事务。这可以显著提高性能,因为将多个插入操作合并到一个事务中可以减少磁盘写入次数。
mysqli_autocommit($connection, false);
for ($i = 0; $i < 10000000; $i++) {
   $query = "INSERT INTO your_table (column1, column2) VALUES ('$i', 'data')";
   mysqli_query($connection, $query);
}
mysqli_commit($connection);
mysqli_autocommit($connection, true);
使用 LOAD DATA INFILE:
MySQL 提供了 LOAD DATA INFILE 命令,可以更高效地导入大量数据。您可以将数据存储在文本文件中,然后使用这个命令导入。
$filename = 'data.txt';
$query = "LOAD DATA INFILE '$filename' INTO TABLE your_table (column1, column2)";
mysqli_query($connection, $query);
使用专业工具:
对于处理海量数据,有一些专业工具可以更好地优化性能,如 mysqldumpmysqlimport 等。这些工具在导入大数据集时可能会更高效。请注意,以上示例中的代码只是演示,您需要根据您的实际情况进行适当的调整和测试。在插入大量数据时,还需要注意数据库的性能配置,如适当的缓冲区设置、索引的优化等。