当前位置:  开发笔记 > 编程语言 > 正文

如何优化1000个MySQL查询?

如何解决《如何优化1000个MySQL查询?》经验,为你挑选了1个好方法。

我有一个名为prices1000个元素的数组,我用这个代码将它们添加到数据库中:

for (int i = 0; i < 1000; i++) {
  $query  = "INSERT INTO TABLE data (amount) VALUES";
  $query .= " (" . $prices[i] . ");";
  mysqli_query($link, $query);
}

虽然它有效,但它需要超过15秒才能完成,我该怎么做才能优化它?



1> Elias Van Oo..:

从技术上讲,你甚至不需要循环.您只需将所有值插入一个数组:

$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查询而不是编写脚本来插入所有值

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有