2011-01-04 16 views
35

Lassen Sie mich damit beginnen zu sagen, ich habe viele ähnliche Fragen gefragt, aber alle von ihnen beziehen sich auf Timestamp und DateTime Feldtyp ohne Indizierung. Zumindest ist das mein Verständnis.MySQL Integer vs DateTime Index

Wie wir alle wissen, gibt es bestimmte Vorteile, wenn es um DateTime geht. Setzen Sie sie beiseite für eine Minute und Tabelle des Motors unter der Annahme InnoDB mit 10+ million records, die Abfrage schneller durchführen würde, wenn Kriterien basiert:

  1. Datetime mit Index
  2. int mit dem Index

Mit anderen Worten, es ist besser, Datum und Uhrzeit als DateTime oder UNIX-Zeitstempel in int zu speichern? Denken Sie daran, dass keine eingebauten MySQL-Funktionen benötigt werden.

aktualisieren

Getestet mit MySQL 5.1.41 (64bit) und 10 Millionen Platten zeigten erste Tests Unterschied signifikant Geschwindigkeit zugunsten von int. Zwei Tabellen wurden verwendet, tbl_dt mit DateTime und tbl_int mit int Spalte. Einige 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 mit beiden Felder ein weiteres Update veröffentlichen werden in einer Tabelle von shantanuo wie vorgeschlagen.

Update # 2

Endgültige Ergebnisse nach zahlreichen Server abstürzt :) Int-Typ ist wesentlich schneller, egal welche Abfrage ausgeführt wurde, war die Geschwindigkeitsdifferenz mehr oder weniger die gleichen wie oben Ergebnisse.

"Strange" beobachtet wurde, war Ausführungszeit mehr oder weniger die gleiche, wenn zwei beide Feldtypen in der gleichen Tabelle gespeichert sind. Es scheint, dass MySQL schlau genug ist, herauszufinden, wann die Werte in DateTime und int identisch sind. Habe keine Dokumentation zu diesem Thema gefunden, ist also nur eine Beobachtung.

+0

Haben Sie es versucht? Warum nicht einen schnellen Benchmark einrichten und herausfinden? – ircmaxell

+0

Ich arbeite daran, es dauert einige Zeit, um 10 Millionen Datensätze mit meiner Hardware zu füllen :) –

+0

Stellen Sie sicher, SELECT SQL_NO_CACHE in Ihrem Test – coolgeek

Antwort

5

Mein Instinkt wäre zu sagen, dass Ints immer schneller sind. Allerdings scheint dies nicht der Fall

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

bearbeitet zu werden hinzufügen: Ich weiß, dass Sie InnoDB verwenden, anstatt MyISAM, aber ich habe nichts zu widerlegen diese im InnoDB Fall gefunden. Auch der gleiche Autor hat eine InnoDB Test

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

+6

Nur weil er 'WHERE datetime> UNIX_TIMESTAMP ('1970-01-01 01:30:00') UND datetime