Позвольте мне начать с того, что я рассмотрел многие подобные вопросы, но все они относятся к типу полей 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
Конечные результаты после многочисленных сбоев сервера: тип "У" значительно быстрее, независимо от того, какой запрос выполнялся, разница в скорости была более или менее такой же, как и результаты выше.
"Странная" вещь наблюдалась, когда время выполнения было более или менее одинаковым, когда два одинаковых типа поля сохраняются в одной таблице. Кажется, MySQL достаточно умен, чтобы понять, когда значения одинаковы при сохранении как в DateTime, так и в int. Не нашли никакой документации по этому вопросу, поэтому это просто наблюдение.