首页 >数据库 >mysql教程 >如何优化 MySQLi 中的批量数据插入以提高速度和安全性?

如何优化 MySQLi 中的批量数据插入以提高速度和安全性?

Susan Sarandon
Susan Sarandon原创
2024-12-31 13:28:11775浏览

How Can I Optimize Bulk Data Insertion into MySQLi for Speed and Security?

MySQLi 中批量值插入的增强技术

当面临安全地将大量值插入 MySQL 数据库的任务时,开发人员经常诉诸重复的准备好的语句,这对于大型数据集来说可能非常耗时。本文探讨了一种在不影响 SQL 注入安全性的情况下增强性能的技术。

问题:堆栈溢出和缓慢插入

一种常见的方法是在循环分别插入每个值。但是,当数据集很大时,此方法可能会导致堆栈溢出或执行速度变慢。

$array = ["array", "with", "about", "2000", "values"];

foreach ($array as $one) {
    $query = "INSERT INTO table (link) VALUES (?)";
    $stmt = $mysqli->prepare($query);
    $stmt->bind_param("s", $one);
    $stmt->execute();
    $stmt->close();
}

解决方案:事务和优化执行

优化上面的代码,我们可以采用事务和改进执行的组合策略:

$array = ["array", "with", "about", "2000", "values"];
$query = "INSERT INTO table (link) VALUES (?)";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("s", $one);

$mysqli->query("START TRANSACTION");
foreach ($array as $one) {
    $stmt->execute();
}
$stmt->close();
$mysqli->query("COMMIT");

实现细节:

  • 事务:我们在插入值之前启动一个事务并在完成后提交它值被插入。这确保了如果在插入过程中发生任何错误,更改将被回滚。
  • 优化执行:我们将准备好的语句和绑定操作移到循环之外。这减少了每次插入值时准备语句的开销。

性能评估

10,000 次迭代的测试表明使用事务时性能显着提高:

  • 没有交易:~226秒
  • 有事务:~2 秒

这种优化技术提供了两个数量级的速度提升,使其成为 MySQL 中批量值插入的高效且安全的解决方案使用 MySQLi 的数据库。

以上是如何优化 MySQLi 中的批量数据插入以提高速度和安全性?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn