MySQL Integer против индекса DateTime - PullRequest
39 голосов
/ 04 января 2011

Позвольте мне начать с того, что я просмотрел много похожих вопросов, но все они относятся к типу поля Timestamp и DateTime без индексации.По крайней мере, это мое понимание.

Как мы все знаем, есть определенные преимущества, когда речь идет о DateTime.Отложив их в сторону на минуту, и предположим, что ядро ​​таблицы InnoDB с 10+ million records, этот запрос будет выполняться быстрее, если критерии основаны на:

  1. DateTime с индексом
  2. 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.Никакой документации по этому вопросу не найдено, поэтому это просто наблюдение.

Ответы [ 3 ]

10 голосов
/ 23 мая 2012

Я вижу, что в тесте , упомянутом в ответе выше , автор в основном доказывает, что когда UNIX time вычисляется заранее, INT выигрывает.

6 голосов
/ 04 января 2011

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

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/

0 голосов
/ 01 мая 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...