Индекс MySQL Integer vs DateTime

Позвольте мне начать с того, что я рассмотрел многие подобные вопросы, но все они относятся к типу полей 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. Не нашли никакой документации по этому вопросу, поэтому это просто наблюдение.

Ответ 1

Мой инстинкт должен был бы сказать, что целые всегда быстрее. Однако, похоже, это не так

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

Отредактировано, чтобы добавить: я понимаю, что вы используете InnoDB, а не MyISAM, но я не нашел ничего, чтобы противоречить этому в случае InnoDB. Кроме того, тот же автор сделал тест InnoDB

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

Ответ 3

это зависит от вашего приложения, как вы можете видеть в отличном сравнении и тесте типов DATETIME, TIMESTAMP и INT на сервере Mysql в формате даты MySQL: какой тип данных следует использовать? Мы сравниваем Datetime, Timestamp и INT. вы можете видеть, что в некоторых ситуациях INT имеет лучшую производительность, чем в других, а в некоторых случаях DATETIME имеет лучшую производительность. и это полностью зависит от вашего приложения