Zunächst möchte ich sagen, dass ich mir viele ähnliche Fragen angeschaut habe, die sich jedoch alle auf Folgendes beziehen Timestamp
y DateTime
Feldtyp ohne Indizierung. Zumindest ist das mein Verständnis.
Wie wir alle wissen, hat die DateTime bestimmte Vorteile. Lassen wir diese für eine Minute beiseite und nehmen wir an, die Engine der Tabelle ist InnoDB
con 10+ million records
Welche Abfrage würde schneller ausgeführt, wenn die Kriterien auf:
- DateTime mit Index
- int mit Index
Mit anderen Worten, es ist besser, Datum und Uhrzeit als DateTime
oder UNIX-Zeitstempel in int
? Beachten Sie, dass keine eingebauten MySQL-Funktionen verwendet werden müssen.
Update
Die ersten Tests mit MySQL 5.1.41 (64bit) und 10 Millionen Datensätzen ergaben einen deutlichen Geschwindigkeitsunterschied zugunsten von int
. Es wurden zwei Tabellen verwendet, tbl_dt
con DateTime
y tbl_int
con int
Spalte. Wenige Ergebnisse:
SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_dt`;
+----------+
| COUNT(*) |
+----------+
| 10000000 |
+----------+
1 row in set (2 min 10.27 sec)
SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_int`;
+----------+
| count(*) |
+----------+
| 10000000 |
+----------+
1 row in set (25.02 sec)
SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_dt` WHERE `created` BETWEEN '2009-01-30' AND '2009-12-30';
+----------+
| COUNT(*) |
+----------+
| 835663 |
+----------+
1 row in set (8.41 sec)
SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_int` WHERE `created` BETWEEN 1233270000 AND 1262127600;
+----------+
| COUNT(*) |
+----------+
| 835663 |
+----------+
1 row in set (1.56 sec)
Ich werde eine weitere Aktualisierung mit beiden Feldern in einer Tabelle vornehmen, wie von shantanuo .
Update #2
Endgültige Ergebnisse nach zahlreichen Serverabstürzen :) Der Typ Int ist deutlich schneller, egal welche Abfrage ausgeführt wurde, der Geschwindigkeitsunterschied war mehr oder weniger derselbe wie bei den obigen Ergebnissen.
"Seltsam war, dass die Ausführungszeit mehr oder weniger gleich war, wenn beide Feldtypen in derselben Tabelle gespeichert sind. Es scheint, dass MySQL intelligent genug ist, um herauszufinden, wann die Werte gleich sind, wenn sie sowohl in DateTime als auch in int gespeichert sind. Ich habe keine Dokumentation zu diesem Thema gefunden, daher ist dies nur eine Beobachtung.