2017-05-22 3 views
-1

Ich versuche, eine große Tabelle mit mehr als 100k Zeilen zu aktualisieren. Ich hole Daten aus der Tabelle mit preg_match und aktualisiere die Tabelle dann erneut mit neuen Werten.Bulk-Datensatz in MySQL zu aktualisieren, der zu viel Zeit in Anspruch nimmt

Das Problem ist, dass es Stunden dauert, den gesamten Datensatz in der Datenbank zu aktualisieren.

Code, ich bin mit

$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>"; 
           } 
       } 
      } 
     } 
} 
+0

können Sie zeigen Ihre Tabellenschema mit 2-3 Dummy-Aufzeichnungen? – Nidhi

+0

Einer der Vorteile von vorbereiteten Anweisungen besteht darin, dass Sie sie einmal vorbereiten und mehrmals verwenden. Bereiten Sie also die zwei Aktualisierungen am Anfang vor (indem Sie verschiedene Variablen verwenden, um jede zu halten) und binden Sie dann und führen Sie für jedes Update aus. –

+0

Siehe meine Artikel zu [_high speed ingestion_] (http://mysql.rjweb.org/doc.php/staging_table) und [_big löscht (oder aktualisiert) _] (http://mysql.rjweb.org/doc. php/deletebig). –

Antwort

Verwandte Themen