Hallo zusammen,
angenommen ich habe eine Tabelle mit 50 tausend Einträgen und ich muss bei nahezu allen dieser Einträge einen Wert ändern.
Hier gäbe es jetzt mehrere Wege. Der Übersichtlichste wäre beispielsweise eine Funktion die jedes mal ein "Update" Befehl ausführt.
Hier ein Beispiel (php, pdo):
Code:
function updateStock($db, $productsId, $stock) {
$sql = "UPDATE
products
SET
products_quantity = :products_quantity
WHERE
products_id = :products_id";
$stmt = $db->prepare($sql);
$stmt->bindParam(':products_id', $productsId);
$stmt->bindParam(':products_quantity', $stock);
$result = $stmt->execute();
if ($result === false) {
return false;
}
return true;
}
Das ganze könnte man jetzt noch über das Prepare Statement optimieren, indem man die Funktion nicht für 50k Einträge neu aufruft, sondern nach dem prepare Aufruf ($db->prepare($sql)) in einer Schleife über alle Daten läuft und dementsprechend die Werte in den gebundenen Variablen $productsId und $stock ändert.
Alternativ könnte man auch alles in einem riesigen Call machen und Versuchen alle 50k Einträge auf einmal zu Updaten (hab ich so noch nicht ausprobiert).
Ich bin mit der unoptimierten Variante, bei der updateStock() immer wieder aufgerufen wird, von der Performance her zufrieden und ist im Code so meiner Meinung nach auch am lesbarsten. Ist es trotz allem sinnvoll das ganze zu optimieren? Ich denke da auch an die Auslastung der DB, falls das ganze z.B. Stündlich passiert.