2009-11-01 3 views
9

Это состоит из двух вопросов:Насколько быстрее метка времени, чем столбец datetime в MySQL?

  1. ли отметка времени поле MySQL действительно быстрее, чем в поле даты и времени «порядка по» запросу?

  2. Если ответ на предыдущий вопрос - да, насколько бы он быстрее не мог быть? Предполагается, что в таблице из 100 миллионов строк и часто сортировать пучок из 100-200 тыс. Строк на основе временного поля внутри MySQL, будет ли время улучшения сортировки уменьшено путем преобразования метки времени в читаемый формат строки во внешней программе?

ответ

9

Самый простой способ узнать, это написать единичный тест и фактически получить некоторые цифры.

Моя теория в том, что отметка времени будет быстрее, но в соответствии с этим блогом, я не прав: http://dbscience.blogspot.com/2008/08/can-timestamp-be-slower-than-datetime.html

Именно поэтому я, как правило, чтобы получить число, профилированием, прежде чем я решить, где для оптимизации, как мой кишки чувство может быть довольно ошибочным в разы.

Таким образом, это может зависеть от версии MySQL, которую вы используете, но похоже, что datetime может быть быстрее.

+1

Одинаковая история здесь: http://www.dbtuna.com/article.asp?id=36 –

3

Из того, что я могу сказать, основное преимущество использования TIMESTAMP по сравнению с DATETIME - это возможность автоматически устанавливать значение текущего времени на создание строки и возможность установить его (или другой столбец с небольшим усилием) на текущее время обновления строки. Это позволяет автоматически создать и изменить дату.

Из-за других ограничений в столбце TIMESTAMP (например, чтобы не принимать даты за пределами определенного диапазона или изменять, если изменяется часовой пояс сервера), DATETIME будет предпочтительнее, если вам не нужен один из двух признаков сверху.

Однако, если вам просто интересно хранить временную метку Unix в базе данных и не нужно, чтобы база данных когда-либо конвертировала ее, вы, вероятно, могли бы хранить ее как целое без знака напрямую и добиться небольшой производительности.

+0

@Jason: Как вы думаете, как установить параметр как СЕЙЧАС()? –

+0

Я знаю. Разница заключается в том, что значение TIMESTAMP устанавливается без указания в INSERT или UPDATE. Лично я использую DATETIME, и мой уровень абстракции DB обновляет автоматически созданные и измененные поля для меня. – Jason

+0

@ Джейсон, спасибо за ваш вклад. В этом случае я забочусь только о производительности сортировки данных, предел диапазона в поле метки времени не является проблемой. Я знаю еще одно преимущество поля timestamp - ему требуется 381.5 МБ дискового пространства для таблицы в 100 миллионов строк. – jack

Смежные вопросы