Vorrei iniziare dicendo che ho esaminato molte domande simili, ma tutte si riferiscono al tipo di campo Timestamp
e DateTime
senza indicizzazione. Almeno questa è la mia comprensione.Indice MySQL integer vs DateTime
Come tutti sappiamo, ci sono alcuni vantaggi quando si tratta di DateTime. li Mettendo da parte per un minuto, e assumendo il motore del tavolo è InnoDB
con 10+ million records
, che interrogazione avrebbe eseguito più velocemente quando criteri si basa su:
- DateTime con indice
- int con indice
In altre parole, è meglio memorizzare data e ora come DateTime
o timestamp UNIX in int
? Tenere presente che non è necessario utilizzare funzioni MySQL incorporate.
Aggiornamento
Testato con MySQL 5.1.41 (64 bit) e 10 milioni di dischi, i test iniziali hanno mostrato una significativa differenza di velocità a favore di int
. Sono stati utilizzati due tavoli, tbl_dt
con DateTime
e tbl_int
con colonna int
. Pochi i risultati:
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)
Vi posto un altro aggiornamento con entrambi i campi in una tabella come suggerito da shantanuo.
Aggiornamento # 2
risultati finali dopo numerosi crash del server :) tipo int è significativamente più veloce, non importa quale query è stata eseguita, la differenza di velocità era più o meno lo stesso di risultati di cui sopra.
"Strange" cosa osservata era il tempo di esecuzione era più o meno lo stesso quando due tipi di campi sono memorizzati nella stessa tabella. Sembra che MySQL sia abbastanza intelligente da capire quando i valori sono gli stessi quando sono archiviati in DateTime e int. Non ho trovato alcuna documentazione sull'argomento, quindi è solo un'osservazione.
Hai provato? Perché non impostare un benchmark rapido e scoprirlo? – ircmaxell
Lavorando su di esso mentre parliamo, ci vuole del tempo per popolare 10 milioni di record con il mio hardware :) –
Assicurati di selezionare SQL_NO_CACHE nei tuoi test – coolgeek