$conn = new mysqli($servername, $username, $password, $dbname); // 检测连接 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "INSERT INTO users (name, age, sex) VALUES "; for ($i = 0; $iquery($sql) === TRUE) { $end = microtime(true); $time = $end - $start; echo "插入成功,用时:{$time} 秒"; } else { echo "Error: " . $sql . "
" . $conn->error; } $conn->close();
上述代码演示了 MySQL 数据库的批量插入操作,通过循环构建 SQL 语句,将 10000 条数据插入名为 users 的表中。然而,当大家一次性插入的数据量越来越大时,插入速度却逐渐变慢,直至无法继续执行。
这一现象出现的原因在于,MySQL 默认开启了自动提交模式。当大家每次执行一条 SQL 语句时,都需要向数据库发送一次请求,并且会立即对数据库进行提交。这样的过程需要大量的时间和计算资源,因此在批量插入数据时会造成不必要的浪费。
为了解决这个问题,大家可以使用 MySQL 的预处理语句和事务模式来优化插入效率。
$conn = new mysqli($servername, $username, $password, $dbname); // 检测连接 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // 关闭自动提交模式,开启事务模式 $conn->autocommit(FALSE); $sql = "INSERT INTO users (name, age, sex) VALUES (?, ?, ?)"; $stmt = $conn->prepare($sql); $stmt->bind_param("sis", $name, $age, $sex); for ($i = 0; $iexecute(); } // 提交事务 $conn->commit(); $end = microtime(true); $time = $end - $start; echo "插入成功,用时:{$time} 秒"; $stmt->close(); $conn->close();
在上述代码中,大家通过将自动提交模式关闭,开启事务模式,并使用预处理语句来实现了批量插入数据库的操作。预处理语句允许大家先将 SQL 语句赋值到一个变量中,然后再将参数绑定到这个语句中,最后在循环中执行语句。这种操作只需要进行一次请求和提交,可以大大提高效率。
因此,当大家在 MySQL 中批量插入数据时,需要注意自动提交模式和事务模式的使用。通过优化插入操作,大家可以提高MySQL 的效率,更高效地管理和储存数据。