dedlfix: Performance MySQL updaten

Beitrag lesen

Tach!

Lange rede, kurze Frage. Gibt es eine bessere Methode, Werte in der Datenbank zu aktualisieren?

Wenn du die Werte per Ausdruck in einem SQL-Statement berechnen kannst, also keine externen Daten benötigst, dann kannst du dich auf lediglich ein Update-Statement beschränken. Also gemäß diesem Prinzip:

UPDATE tabelle SET feld = feld + 1;

Ansonsten kann ich dir nicht sagen, was du kürzen kannst, ohen zu wissen, was du konkret vorhast. Nur ein paar offensichtliche Dinge kann ich ansprechen:

$get_data = $db->prepare(sprintf('SELECT x,y FROM a')); $get_data->execute();

Das sprintf() hat an der Stelle keinen Nutzen.

  $update_data = $db->prepare(sprintf('UPDATE %s SET y = %.20f WHERE id = %d', mysqli_real_escape_string($db, 'table'), $data['y'], $id));

Zudem ist es nicht sinnvoll, die Methode des Zusammenstückeln von Statement und Werten mit Prepared Statements zu mixen, ohne die Eigenschaften von Prepared Statements zu verwenden.

Wenn du das Statement selbst zusammenbauen möchtest, dann kannst du mysqli_query() statt mysqli_prepare() und mysqli_stmt_execute() nehmen. Das ist kürzer und spart einen Roundtrip zwischen PHP und MySQL. Dann solltest du aber auch das mit dem Maskieren richtig machen. Ein Tabellenname ist kein Wert, sondern ein Identifier. Für Identifier gelten andere Maskierungsregeln als die Funktion mysqli_real_escape_string() berücksichtigt. Üblicherweise stehen Identifier direkt im Statement und werden nicht bei Bedarf hinzugefügt. Vermutlich gibt es deshalb keine vorgefertigte Funktion, mit der man das erledigen könnte.

Außerdem fehlt dir zu dem Prepare das Execute. Das Commit ist kein Ersatz und auch nur für Transactions sinnvoll. Und die Verbindung selbst zu schließen ist auch nur selten notwendig. Besonders dann nicht, wenn man weitere Statements ausführen möchte und sie dazu wiederherstellen muss. Die Verbindung wird am Script-Ende bereits von PHP geschlossen. Man muss da nicht aufräumen. Es ist nur notwendig, sie händisch zu schließen, wenn die Verbindungen eine knappe Ressource sind und das Script noch ewig läuft, ohne sie zu nutzen. Üblicherweise hat man solch einen Fall nicht.

dedlfix.