Позвольте мне начать с того, что я просмотрел много похожих вопросов, но все они относятся к типу поля Timestamp
и DateTime
без индексации.По крайней мере, это мое понимание.
Как мы все знаем, есть определенные преимущества, когда речь идет о DateTime.Отложив их в сторону на минуту, и предположим, что ядро таблицы InnoDB
с 10+ million records
, этот запрос будет выполняться быстрее, если критерии основаны на:
- DateTime с индексом
- int с индексом
Другими словами, лучше хранить дату и время как DateTime
или метку времени UNIX в int
?Имейте в виду, что нет необходимости использовать какие-либо встроенные функции MySQL.
Обновление
Протестировано с MySQL 5.1.41 (64 бита) и 10 миллионами записейПервоначальное тестирование показало существенную разницу в скорости в пользу int
.Были использованы две таблицы: tbl_dt
с DateTime
и tbl_int
с int
столбцом.Немного результатов:
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)
Я опубликую еще одно обновление с обоими полями в одной таблице, как предложено shantanuo .
Обновление # 2
Окончательные результаты после многочисленных сбоев сервера :) Тип Int значительно быстрее, независимо от того, какой запрос был выполнен, разница в скорости была более или менее такой же, как и результаты выше.
«Странно»наблюдалось, что время выполнения было более или менее одинаковым, когда два типа обоих полей хранятся в одной и той же таблице.Кажется, MySQL достаточно умен, чтобы выяснить, когда значения одинаковы, когда хранятся как в DateTime, так и в int.Никакой документации по этому вопросу не найдено, поэтому это просто наблюдение.