55 Stimmen

MySQL Integer- vs. DateTime-Index

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:

  1. DateTime mit Index
  2. 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.

11voto

Bexol Punkte 141

Ich sehe das in der der in der obigen Antwort erwähnte Test beweist der Autor im Grunde genommen, dass, wenn die UNIX time wird im Voraus berechnet, INT gewinnt.

9voto

coolgeek Punkte 903

Mein Instinkt würde sagen, dass Ints immer schneller sind. Dies scheint jedoch nicht der Fall zu sein

http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-myisam/

Nachtrag: Mir ist klar, dass Sie InnoDB und nicht MyISAM verwenden, aber ich habe nichts gefunden, was dem im Fall von InnoDB widerspricht. Außerdem hat derselbe Autor einen InnoDB-Test durchgeführt

http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-innodb/

1voto

Yuseferi Punkte 6592

Es hängt von Ihrer Anwendung ab, wie Sie in einem großartigen Vergleich und Benchmark von DATETIME , TIMESTAMP und INT in Mysql Server sehen können MySQL Datumsformat: Welchen Datentyp sollten Sie verwenden? Wir vergleichen Datetime, Timestamp und INT. Sie können sehen, dass INT in manchen Situationen besser abschneidet als andere und dass DATETIME in manchen Fällen besser abschneidet. und Das hängt ganz von Ihrer Anwendung ab

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X