it-swarm.com.de

MySQL Integer vs. DateTime-Index

Lassen Sie mich zunächst sagen, dass ich viele ähnliche Fragen gestellt habe, die sich aber alle auf den Timestamp- und DateTime-Feldtyp beziehen, ohne indiziert zu werden. Zumindest ist das mein Verständnis. 

Wie wir alle wissen, hat DateTime gewisse Vorteile. Legen Sie sie für eine Minute beiseite und nehmen Sie an, dass die Engine der Tabelle InnoDB mit 10+ million records ist. Welche Abfrage würde schneller funktionieren, wenn Kriterien auf folgenden Kriterien basieren:

  1. DateTime mit Index
  2. int mit index

Mit anderen Worten, es ist besser, Datum und Uhrzeit als DateTime oder UNIX-Zeitmarke in int zu speichern. Beachten Sie, dass keine integrierten MySQL-Funktionen verwendet werden müssen.

Update

Getestet mit MySQL 5.1.41 (64bit) und 10 Millionen Datensätzen, zeigten die ersten Tests einen signifikanten Geschwindigkeitsunterschied zugunsten von int. Es wurden zwei Tabellen verwendet, tbl_dt mit DateTime und tbl_int mit 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 ein weiteres Update mit beiden Feldern in einer Tabelle posten, wie von shantanuo vorgeschlagen.

Update # 2

Endgültige Ergebnisse nach zahlreichen Serverabstürzen :) Der Int-Typ ist erheblich schneller, unabhängig davon, welche Abfrage ausgeführt wurde. Der Geschwindigkeitsunterschied war mehr oder weniger derselbe wie in den obigen Ergebnissen.

"Merkwürdig" wurde beobachtet, dass die Ausführungszeit mehr oder weniger gleich war, wenn zwei Feldtypen in derselben Tabelle gespeichert wurden. Es scheint, dass MySQL klug genug ist, um herauszufinden, wann die Werte gleich sind, wenn sie in DateTime und int gespeichert werden. Ich habe keine Dokumentation zu diesem Thema gefunden, daher ist es nur eine Beobachtung.

38
David Kuridža

Mein Instinkt wäre zu 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-und-benchmarking-mit-myisam/

Zum Hinzufügen hinzugefügt: Ich weiß, dass Sie InnoDB anstelle von MyISAM verwenden, aber im InnoDB-Fall habe ich nichts dagegen gefunden. Derselbe Autor hat auch einen InnoDB-Test durchgeführt

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

5
coolgeek

Ich sehe, dass der Autor im test, der in der obigen Antwort erwähnt wurde, im Wesentlichen beweist, dass, wenn der UNIX time im Voraus berechnet wird, INT gewinnt.

10
Bexol

es hängt von Ihrer Anwendung ab, wie Sie in einem großartigen Vergleich und Benchmark von DATETIME, TIMESTAMP und INT in MySQL-Server im MySQL-Datumsformat sehen können: Welchen Datentyp sollten Sie verwenden? Wir vergleichen Datetime, Timestamp und INT. Sie können in einigen Situationen sehen, dass INT eine bessere Porfomance hat als andere, und in einigen Fällen hat DATETIME eine bessere Leistung. und Es hängt völlig von Ihrer Anwendung ab

0
Yusef Mohamadi