Heute gibt es mal wieder einen Beitrag zur Performance im Umgang von PHP und MySQL – angeregt duch eine Mail von Alex Kuhrt. Eigentlich wollte ich dieses Thema schon lange mal untersuchen, aber bin leider nicht dazu gekommen. Eine der häufigsten (wenn nicht die häufigste) Anwendungen beim Umgang mit MySQL ist das Weiterverarbeiten der Daten eines Result-Sets. Dafür bietet PHP jede Menge Möglichkeiten: mysql_fetch_object, mysql_fetch_array, mysql_fetch_assoc und mysql_fetch_row. Eventuell gibt es auch noch mehr, weiß ich jetzt nicht. Jedenfalls ist es schon verwunderlich, dass PHP da so viele Funktionen anbietet. Ich wollte der Sache mal auf den Grund gehen und die verschiedenen Varianten hinsichtlich ihrer Performance untersuchen. Weiterlesen >
Schlagwörter:
datenbank,
datensatz,
einlesen,
MySQL
Oft hat man das Problem, dass man unbedingt möchte, dass ein bestimmter Index genutzt wird. Hat man die Tipps im letzten Beitrag befolgt und der Index wird laut EXPLAIN-Befehl immernoch nicht benutzt, wundert man sich. Als nächster Schritt wird brachiale Gewalt angewendet, indem man FORCE INDEX benutzt, damit auch garantiert der gewünschte Index genutzt wird. Aber MySQL verweigert weiterhin. Warum nur? Weil die SELECT-Anfrage genau das verhindert! Ich möchte hier ein paar typische Fehler aufzeigen und wie man es besser macht, damit Indizes überhaupt genutzt werden können und die Abfragen erheblich schneller abgearbeitet werden können. Weiterlesen >
Schlagwörter:
datenbank,
indizes,
MySQL,
performance
Indizes und der richtige Umgang mit ihnen sind im Datenbankumfeld ein beliebtes Thema. Es stecken allerdings sehr viele interne Kenntnisse des DBMS hinter der optimalen Nutzung von Indizes. Wer sich bereits intensiv mit dem Einsatz von Indizes beschäftigt hat, dem möchte ich hier noch einige DB-Interna nennen, die bestimmt helfen werden, den Index-Einsatz noch weiter zu optimieren. Weiterlesen >
Schlagwörter:
datenbank,
db,
indizes,
MySQL
Neben dem Selektieren und dem Aktualisieren ist das Einfügen neuer Datensätze in eine Tabelle eine sehr häufig durchgeführte Operation. Ein sehr häufiger Anwendungsfall ist es, dass nicht nur ein paar einzelne Neueinträge hinzugefügt werden, sondern gleich ein ganzer Rutsch neuer Datensätze hinzugefügt werden sollen. Dieser Beitrag soll einige Tipps geben, wie man neue Datensätze möglichst schnell einfügt und somit die Sperrzeiten der Tabellen möglichst gering hält, denn beispielsweise MyISAM unterstützt nur Table-Locks, wodurch die gesamte Tabelle für den Zugriff gesperrt ist. Fügt man dann mal nebenbei einige Tausend Datensätze hinzu, kann die Tabelle für einen recht langen Zeitraum gesperrt sein, denn Inserts und Updates sind in MySQL stets höher priorisiert als Selects (außer man verzögert das Einfügen explizit mit DELAYED oder LOW_PRIORITY). Es sollte demzufolge das Ziel sein das Einfügen so schnell wie möglich fertig zu bekommen, damit die Datenbank sich wieder mit dem Selektieren für Zwecke der eigentlichen Anwendung beschäftigen kann. Weiterlesen >
Schlagwörter:
datenbank,
insert,
MySQL,
schleife,
standardwert
Oft steht man bei der Wahl des Datentyps für eine Tabellenspalte vor der Frage, ob man die statische CHAR- oder die dynamische VARCHAR-Version nutzt. Im Internet findet man auch unterschiedliche Meinungen dazu (vgl. Zach Nichters Beitrag und die offizielle Stellungnahme in der MySQL-Dokumentation, deshalb wollte ich mir selbst ein Urteil dazu bilden. Weiterlesen >
Schlagwörter:
datenbank,
datentypen,
dynamisch,
MySQL,
statisch
Auf großen Webseiten bemerkt man als Webmaster oft gar nicht, dass Performance-Probleme auftreten, weil man nicht ständig alle Scripts aufruft und das wohlmöglich noch mit allen möglichen Eingabeparametern. Das wurde am Anfang mal gemacht und dann für performant befunden. Mit der Größe der Datenbank wächst allerdings oft auch der Aufwand für Joins und Ähnliches, deshalb können diese für performant gehaltenen Abfragen mit der Zeit echte Bremsen werden. Doch wie kann man ohne viel Aufwand trotzdem bemerken, ob irgendwelche Queries langsam sind? Weiterlesen >
Schlagwörter:
datenbank,
indizes,
MySQL