【问题标题】:Updating bulk record in mysql taking too much time [duplicate]更新mysql中的批量记录需要太多时间[重复]
【发布时间】:2017-05-22 11:14:24
【问题描述】:

我正在尝试更新一个包含超过 100k 行的大表。我正在从应用 preg_match 的表中获取数据,然后用新值再次更新表。

问题是更新数据库中的所有记录需要几个小时。

我正在使用的代码

$sql = "SELECT id, city_hotel, state, cc1 FROM hotel_names";
$result = $conn->query($sql);
$array = array();
if ($result->num_rows > 0) {
// output data of each row
 while($row = $result->fetch_assoc()) {
     $array[] = $row; 
  }
}
foreach ($array as $arr)
{       
    if (preg_match_all('/\(([A-Za-z0-9 ]+?)\)/', $arr['city_hotel'], $out))
        {
            if(!empty($out))
            {
                $STATE[] = $out[1];
                //print_r($STATE);
                foreach ($STATE as $state)
                {
                    $st = $state[0];
                    print_r($state) ;
    $stmt = $conn->prepare("UPDATE hotel_names SET state = ? WHERE id = ? ");
                    $stmt->bind_param('ss' ,$st, $arr['id']);
                    $stmt->execute();
                    echo "State Updated <br>";
                                if(preg_replace("/\([^)]+\)/","",$arr['city_hotel']))
                                {
                                    $city = preg_replace("/\([^)]+\)/","",$arr['city_hotel']);
                                    //echo $city = trim($city).'<br>';
                                    $stmt = $conn->prepare("UPDATE hotel_names SET  city_hotel = ? WHERE id = ? ");
                                    $stmt->bind_param('ss' , $city, $arr['id']);
                                    $stmt->execute();       
                                    echo "City Updated <br>";   
                                }
                }
            }
        }   
}

【问题讨论】:

  • 你能用 2-3 个虚拟记录显示你的表模式吗?
  • 使用prepared statements的一个好处是你准备一次并且使用多次。因此,在开始时准备两个更新(使用不同的变量来保存每个更新),然后为每个更新绑定并执行。
  • high speed ingestionbig deletes (or updates) 上查看我的文章。

标签: php mysql sql performance


【解决方案1】:

这需要时间,因为您在循环中一次又一次地执行 sql。因此它会生成如此多的进程。您可以按照给定的链接在执行过程中执行多个查询。

(PDO PHP) The fastest way to update or insert multiple rows?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 2014-09-21
    相关资源
    最近更新 更多