我有一个名为prices
1000个元素的数组,我用这个代码将它们添加到数据库中:
for (int i = 0; i < 1000; i++) { $query = "INSERT INTO TABLE data (amount) VALUES"; $query .= " (" . $prices[i] . ");"; mysqli_query($link, $query); }
虽然它有效,但它需要超过15秒才能完成,我该怎么做才能优化它?
从技术上讲,你甚至不需要循环.您只需将所有值插入一个数组:
$query = 'INSERT INTO data (amount) VALUES '; $valueSets = array_fill(0, count($prices), '(?)');//creates an array containing a (?) string for each price $pdo = new PDO($dsn, $user, $pass, $attr); $query .= implode(', ', $valueSets);//concatenate onto query string $stmt = $pdo->prepare($query); $stmt->execute($prices);
就这样.当然,这不是一个很好的做事方式,所以我可能会使用这样的东西:
$stmt = $pdo->prepare('INSERT INTO data (amount) VALUES (:price)'); foreach ($prices as $price) { $stmt->execute([':price' => $price]); $stmt->closeCursor();//optional }
或者,如果你真的想使用Mysqli:
$stmt = $link->prepare('INSERT INTO data (amount) VALUES (?)'); $price = null; $stmt->bind_param('i', $price);//bind by reference foreach ($prices as $price) { $stmt->execute();//insert price }
但老实说:这对我看起来像DB夹具相关的东西.我只是将价格放在CSV文件中,然后运行LOAD DATA LOCAL INFILE
查询而不是编写脚本来插入所有值