Насколько быстрее метка времени, чем столбец даты и времени в MySQL?

Он состоит из двух вопросов:

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

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


person jack    schedule 01.11.2009    source источник


Ответы (2)


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

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

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

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

person James Black    schedule 01.11.2009

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

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

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

person Jason    schedule 01.11.2009
comment
@Jason: Как вы думаете, что делает установка параметра NOW()? - person OMG Ponies; 01.11.2009
comment
Я в курсе. Разница в том, что значение TIMESTAMP устанавливается без указания в INSERT или UPDATE. Лично я использую DATETIME, и мой уровень абстракции БД автоматически обновляет созданные и измененные поля для меня. - person Jason; 01.11.2009
comment
@ Джейсон, спасибо за ваш вклад. В этом случае меня волнует только производительность сортировки данных, ограничение диапазона поля метки времени не является проблемой. Я знаю еще одно преимущество поля timestamp: для таблицы из 100 миллионов строк требуется на 381,5 МБ меньше места на диске. - person jack; 01.11.2009