Datetime vs Дата и время Mysql
Обычно я использую поле datetime для хранения обновленного времени данных, созданного в приложении, в приложении.
Но теперь я столкнулся с таблицей базы данных, где они сохранили отдельные и отдельные поля в таблице.
- Итак, какова схема, в которой два из них должны использоваться и почему?
- Какие плюсы и минусы связаны с использованием двух?
Ответы
Ответ 1
Я склонен думать, что нет никаких оснований сохранять дату и время в отдельных полях. MySQL предлагает очень удобные функции для извлечения деталей даты и времени значения datetime
.
Хорошо. Могут быть некоторые соображения эффективности. В MySQL вы можете поместить отдельные индексы в поля. Итак, если вы хотите, например, искать конкретные времена, то запрос, который подсчитывается по часам дня (например), может использовать индекс в поле time
. В этом случае индекс в поле datetime
не будет использоваться. В отдельном поле date
может быть проще написать запрос, который будет использовать индекс date
, но, строго говоря, должен работать и datetime
.
Одно время, когда я видел даты и время, хранящиеся отдельно, находится в торговой системе. В этом случае торговля имеет дату оценки. Время оценки - это что-то вроде "NY Open" или "London Close" - это не значение в реальном времени. Это описание времени суток, используемого для оценки.
Ответ 2
Существует огромная разница в производительности при использовании поля 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 INDEX:
197,564 секунды.
SELECT * FROM `logs` WHERE `d` BETWEEN '2015-04-01' AND '2015-05-01' LIMIT 10000,10;
ИНДЕКС ДАТЫ:
107.577 секунд.
Использование индексированного по дате поля имеет улучшение производительности: 45,55%!!
Итак, я бы сказал, что если вы ожидаете большого количества данных в своей таблице, подумайте о том, чтобы отделить дату от времени своим собственным индексом.
Ответ 3
Сложная часть - это когда вам нужно выполнить арифметику дат по значению времени, и вы не хотите, чтобы в микс была добавлена дата. Пример:
myapptdate = 2014-01-02 09:00:00
Выберите такие-то, где myapptdate между 2014-01-02 07:00:00 и 2014-01-02 13:00:00
1900-01-02 07:00:00
2014-01-02 07:00:00