Bei der Entwicklung eines Projektes in PHP & MySQL ist es oft wichtig ein Datum zu speichern. Doch wie macht man das am besten? Es gibt 2 weit verbreitete Möglichkeiten:
- Speicherung des Timestamps in Feldern mit dem Datentyp INT(10) und später mit date() zu formatieren
- Nutzung des MySQL Datentyp DATETIME und beim Auslesen mit DATE_FORMAT zu formatieren
Ich habe beide Möglichkeiten nun einmal genau unter die Lupe genommen, und getestet welche Variante die beste im Punkto Performance ist.
Dazu habe ich mir eine Datenbank mit 1 Millionen Einträgen angelegt, mit einem Feld des Types DATETIME und eine mit dem Typ INT(10). Die Ergebnisse wurden über mysql_fetch_assoc() ausgelesen. Eine Ausgabe gehörte zu dem Test dazu, wurden aber durch die Ausgabepufferung von PHP nicht sichtbar ausgegeben. Die Daten, die später vorhanden sein sollen, haben das Format d.m.Y H:i:s. Ich denke, das war alles nennenswerte.
Das Ergebnis sieht wie folgt aus:
Benchmark PHP/MySQL Datumsspeicherung
| Was? | Laufzeit in s | Verhältnis zum Schnellsten |
|---|---|---|
| MySQL DATETIME/DATE_FORMAT | 0.413642883301 | 100% |
| PHP Timestamp/INT(10) + date() | 11.4405422211 | 2765.8% |
Die Quelltexte könnt ihr euch hier ansehen.
Fazit: Sofern es nicht zwingend notwendig ist, einen Timestamp zu speichern, sollte man also unbedingt seine Zeit in einem Feld des Types DATETIME (oder DATE, wenn nur das Datum benötigt wird) gespeichert werden, da ein wirklich extremer Geschwindigkeitsunterschied vorliegt!
