Hallo,
im Rahmen eines Codes bilde ich bei mir zwei "Update-Arrays", die jeweils rund 20.000 Einträge nach folgendem Schema besitzen:
$array1[$id]["wert1"] = 100
$array1[$id]["wert2"] = 100
$array2[$id][$id2]["wert"] = 100
$array2[$id][$id3]["wert"] = 100
Für diese Arrays habe ich am Ende meines Codes einen Update-Befehl in meine MySQL Datenbank, welcher aber extrem lange dauert (ca. 20 Sekunden bestimmt). Das Ganze läuft hier über eine foreach-Schleife mit mysqli-Update Befehlen:
Diese lange Update-Zeit ist nicht wünschenswert und auch nicht tragbar. Gibt es eine Möglichkeit die Performance des Updates zu verbessern?
Infos zur Datenbank
Meine Datenbank-Tabellen haben als Engine InnoDB.
In der Tabelle players gibt es den Primärschlüssel "playerid" und einen Index auf der Spalte "position_id"..
In der Tabelle playerabilities gibt es den Primärschlüssel "playerabilityid" und einen Index auf den Spalten "player_id" und "ability_id".
im Rahmen eines Codes bilde ich bei mir zwei "Update-Arrays", die jeweils rund 20.000 Einträge nach folgendem Schema besitzen:
$array1[$id]["wert1"] = 100
$array1[$id]["wert2"] = 100
$array2[$id][$id2]["wert"] = 100
$array2[$id][$id3]["wert"] = 100
Für diese Arrays habe ich am Ende meines Codes einen Update-Befehl in meine MySQL Datenbank, welcher aber extrem lange dauert (ca. 20 Sekunden bestimmt). Das Ganze läuft hier über eine foreach-Schleife mit mysqli-Update Befehlen:
PHP-Code:
foreach($arUpdatePlayers AS $playerid => $key):
mysqli_query($connection,"UPDATE players SET fitness = '".$key["fitness"]."', freshness = '".$key["freshness"]."' WHERE playerid = '$playerid'");
endforeach;
foreach($arUpdatePlayerabilities AS $playerid => $value):
foreach($value AS $abilityid => $key):
mysqli_query($connection,"UPDATE playerabilities SET value = '".$key["value"]."', training_level = '".$key["training_level"]."' WHERE player_id = '$playerid' AND ability_id = '$abilityid'");
endforeach;
endforeach;
Infos zur Datenbank
Meine Datenbank-Tabellen haben als Engine InnoDB.
In der Tabelle players gibt es den Primärschlüssel "playerid" und einen Index auf der Spalte "position_id"..
In der Tabelle playerabilities gibt es den Primärschlüssel "playerabilityid" und einen Index auf den Spalten "player_id" und "ability_id".
Kommentar