2013-08-21 4 views
15

Обычно я использую поле datetime для хранения обновленного времени в файле created_time в приложении.Datetime vs Date and Time Mysql

Но теперь я столкнулся с таблицей базы данных, где они хранили даты и время отдельных полей в таблице.

  1. Итак, какова схема, в которой два из них должны использоваться и почему?
  2. Какие плюсы и минусы связаны с использованием двух?
+1

Я рассматриваю возможность переключения на отдельные поля даты и времени.моя ситуация заключается в том, что я должен иметь возможность хранить «TBD» раз, когда знаю дату. В настоящее время я использую 12AM в качестве значения для «TBD» раз, но это оказывается больше проблем, чем хотелось бы. Кто-нибудь может найти лучшее решение для TBD раз? или мой предложенный метод работник лучше для них? –

ответ

23

Я склонен думать, что в настоящее время нет никаких оснований хранить дату и время в отдельных полях. MySQL предлагает очень удобные функции для извлечения деталей даты и времени значения datetime.

Хорошо. Могут быть некоторые соображения эффективности. В MySQL вы можете поместить отдельные индексы в поля. Итак, если вы хотите, например, искать конкретное раз, то запрос, который подсчитывается по часам дня (например), может использовать индекс в поле time. В этом случае индекс в поле datetime не использовался. В отдельном поле date может быть проще написать запрос, который будет использовать индекс date, но, строго говоря, также должен работать datetime.

Единственный раз, когда я видел даты и время, хранящиеся отдельно, находится в торговой системе. В этом случае торговля имеет дату оценки. Время оценки - это что-то вроде «NY Open» или «London Close» - это не значение в реальном времени. Это описание времени суток, используемого для оценки.

1

Сложная часть - это когда вам нужно выполнить арифметику дат по значению времени, и вы не хотите, чтобы в микс была введена дата. Пример:

myapptdate = 2014-01-02 09:00:00

Выберите такие и такие, где myapptdate между 2014-01-02 7:00:00 и 2014-01-02 13:00:00

1900-01-02 07:00:00 2014-01-02 07:00:00

25

Существует огромная разница в производительности при использовании поля DATE выше поля DATETIME. У меня есть таблица с более чем 4.000.000 записями, и для целей тестирования я добавил 2 поля с их собственным индексом. Один использует DATETIME и другое поле, используя DATE.

Я отключил кэш MySQL запросов, чтобы иметь возможность проверить правильно и накинут тот же запрос для 1000x:

SELECT * FROM `logs` WHERE `dt` BETWEEN '2015-04-01' AND '2015-05-01' LIMIT 10000,10; DATETIME ИНДЕКС: 197,564 секунд.

SELECT * FROM `logs` WHERE `d` BETWEEN '2015-04-01' AND '2015-05-01' LIMIT 10000,10; ИНДЕКС ДАТЫ: 107.577 секунд.

Использование поля с индексом даты имеет улучшение производительности: 45.55%!

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