Кто в каком виде хранит дату в мускуле?
Кто в каком виде хранит дату в мускуле?
Всю жизнь использовал int. Но почти на каждом шагу слышу, что это плохой тон. Мол лучше использовать timestamp.
Но чем это лучше? Кроме сразу человекопонятного вывода даты не вижу никаких других преимуществ. Автоматическое обновление даты на стороне мускула мне как-то особо не нужно так как есть в йии TimestampBehavior. Функциями для работы даты на стороне мускула никогда не пользовался, по мне так удобнее с датой сделать всё что нужно на стороне PHP.
К тому же с точки зрения производительности наверное всё-таки int предпочтительнее, так как в случае большого количества данных мускулу не требуется никаких дополнительных обработок делать (что происходит при timestamp).
У кого какое мнения? А то я что-то не могу толком определиться казалось бы в таком простом вопросе. Чем всё-таки timestamp лучше и лучше ли чем int?
Но чем это лучше? Кроме сразу человекопонятного вывода даты не вижу никаких других преимуществ. Автоматическое обновление даты на стороне мускула мне как-то особо не нужно так как есть в йии TimestampBehavior. Функциями для работы даты на стороне мускула никогда не пользовался, по мне так удобнее с датой сделать всё что нужно на стороне PHP.
К тому же с точки зрения производительности наверное всё-таки int предпочтительнее, так как в случае большого количества данных мускулу не требуется никаких дополнительных обработок делать (что происходит при timestamp).
У кого какое мнения? А то я что-то не могу толком определиться казалось бы в таком простом вопросе. Чем всё-таки timestamp лучше и лучше ли чем int?
Re: Кто в каком виде хранит дату в мускуле?
Тоже раньше задавался вопросом, но уже давно использую datetime или date, и для восприятия лучше и база спокойно умеет с ними работать. А timestamp при безудержном желании получить не долго
Re: Кто в каком виде хранит дату в мускуле?
вы запутаете людей int vs timestamp, т.к. в не-mysql мире timestamp == unixtime.
Речь идет о unixtime vs datetime/вариации.
Речь идет о unixtime vs datetime/вариации.
Re: Кто в каком виде хранит дату в мускуле?
и это норм. но на стороне php можно в любом формате работать с датой, в прочем как и на стороне БД - не аргумент. А вот то что вам удобнее работать с датой в человекоНЕчитаемом int, а не в datetime, странно.Dromok писал(а):Функциями для работы даты на стороне мускула никогда не пользовался, по мне так удобнее с датой сделать всё что нужно на стороне PHP.
вопрос изучили или так, наобум? давайте так: сделайте тесты и, если ваше приложение замедлится хотя бы на 1%, будем разговаривать о производительности. Если нет просадки производительности на существенную цифру, то сначала мы говорим об удобстве и красоте кода.Dromok писал(а):К тому же с точки зрения производительности наверное всё-таки int предпочтительнее, так как в случае большого количества данных мускулу не требуется никаких дополнительных обработок делать (что происходит при timestamp).
дата должна храниться в дате. есть стандарт даты iso8601, вариант которой (Y-m-d H:i:s в php-нотации) поддерживают все вендоры (mysql, postgres итд). И это кстати не mysql timestamp, а mysql datetimeDromok писал(а):У кого какое мнения? А то я что-то не могу толком определиться казалось бы в таком простом вопросе. Чем всё-таки timestamp лучше и лучше ли чем int?
Re: Кто в каком виде хранит дату в мускуле?
Благодарю. Но datetime сразу отсеял, так как всё-таки 8 байт против 4 байт. Имхо timestamp всё-таки предпочтительнее.jakiro писал(а):Тоже раньше задавался вопросом, но уже давно использую datetime или date, и для восприятия лучше и база спокойно умеет с ними работать. А timestamp при безудержном желании получить не долго
Речь всё-таки о int vs timestamp. Datetime я даже не рассматриваю, так как в этом случае даже куча путаницы с временными зонами будет, да и как выше уже отметил занимает места в два раза больше.zelenin писал(а):Речь идет о unixtime vs datetime/вариации.
А тестов в интернете достаточно. Если хранить дату как int и запросы все посылать именно число, то это быстрее чем работа с датой на стороне мускула.
Я знаю, что Sam Dark раньше только в int хранил дату. Интересно сейчас также делает?
Re: Кто в каком виде хранит дату в мускуле?
Можно пару слов почему именно в int?Sam Dark писал(а):Да.
Я тоже всегда так делал, но чота недавно пообщался с командой программеров, которые крупный проект пишут и говорят это плохой тон в int хранить дату.
Re: Кто в каком виде хранит дату в мускуле?
я уже привел аргументацию выше: дата в дате и человекочитаемость.Dromok писал(а):Можно пару слов почему именно в int?Sam Dark писал(а):Да.
Я тоже всегда так делал, но чота недавно пообщался с командой программеров, которые крупный проект пишут и говорят это плохой тон в int хранить дату.
Re: Кто в каком виде хранит дату в мускуле?
Выдержка из книги издательства O'Reilly "MySQL Оптимизация производительности":
В новом проекте попробую использовать Timestamp. Если что, то на int всегда можно вернуться.... мы рекомендуем пользоваться типом TIMESTAMP, если это возможно, поскольку с точки зрения занимаемого места на диске он гораздо эффективнее, чем DATETIME. Иногда временные метки UNIX сохраняют в виде целых чисел, но обычно это не дает никаких преимуществ. Поскольку такое представление часто неудобно, мы не советуем так поступать.
Re: Кто в каком виде хранит дату в мускуле?
Приведите пожалуйста конкретные ссылки. А то я полез гуглить и натолкнулся на обратные результатыDromok писал(а): А тестов в интернете достаточно. Если хранить дату как int и запросы все посылать именно число, то это быстрее чем работа с датой на стороне мускула.
Yii Jabber Conference: yii@conference.jabber.ru
Re: Кто в каком виде хранит дату в мускуле?
Уже давно не работал с mysql, но так, навскидку задача: нужно сделать выборку всех записей из таблицы за последние два года, но только за субботу и воскресенье. В случае если у нас время записи created_at хранится в datetime/timestamp, то можно написатьDromok писал(а):Функциями для работы даты на стороне мускула никогда не пользовался, по мне так удобнее с датой сделать всё что нужно на стороне PHP.
WHERE DAYOFWEEK(created_at) IN (6,7)
А как будет выглядеть код если время хранится в int ? Думаю, что сложнее.
Yii Jabber Conference: yii@conference.jabber.ru
Re: Кто в каком виде хранит дату в мускуле?
попробуйте не оценивать подходы призрачными преимуществами. Копеечные оптимизации ничто по сравнению с читаемостью кода и хорошей архитектурой. А самая глупая оптимизация - это оптимизация занимаемого места.Dromok писал(а):Выдержка из книги издательства O'Reilly "MySQL Оптимизация производительности":
В новом проекте попробую использовать Timestamp. Если что, то на int всегда можно вернуться.... мы рекомендуем пользоваться типом TIMESTAMP, если это возможно, поскольку с точки зрения занимаемого места на диске он гораздо эффективнее, чем DATETIME. Иногда временные метки UNIX сохраняют в виде целых чисел, но обычно это не дает никаких преимуществ. Поскольку такое представление часто неудобно, мы не советуем так поступать.
Re: Кто в каком виде хранит дату в мускуле?
в пхп вычислить это можно достаточно быстро, хоть и многословнее, но итоговый sql будет включать огромный in с диапазонами.R3D3 писал(а):Уже давно не работал с mysql, но так, навскидку задача: нужно сделать выборку всех записей из таблицы за последние два года, но только за субботу и воскресенье. В случае если у нас время записи created_at хранится в datetime/timestamp, то можно написатьDromok писал(а):Функциями для работы даты на стороне мускула никогда не пользовался, по мне так удобнее с датой сделать всё что нужно на стороне PHP.
WHERE DAYOFWEEK(created_at) IN (6,7)
А как будет выглядеть код если время хранится в int ? Думаю, что сложнее.
- vitalik1183
- Сообщения: 1675
- Зарегистрирован: 2014.07.01, 08:42
Re: Кто в каком виде хранит дату в мускуле?
По вашей же первой ссылке запрос вида select SQL_NO_CACHE count(id) from test_int where datetime > 1800 AND datetime < 2100; быстрее всех остальных на порядок. Об этом я и говорил, что если в запросах передавать чисто числа (то есть вся обработка дат на стороне PHP), то такие запросы намного быстрее тех, где вы передаете дату.R3D3 писал(а):Приведите пожалуйста конкретные ссылки. А то я полез гуглить и натолкнулся на обратные результатыDromok писал(а): А тестов в интернете достаточно. Если хранить дату как int и запросы все посылать именно число, то это быстрее чем работа с датой на стороне мускула.
Re: Кто в каком виде хранит дату в мускуле?
Не вижу преимуществ хранения в int.
С datetime есть проблемы, когда нужно поддерживать часовые пояса. Если их нет, то выбор очевиден.
timestamp конвертирует даты исходя из настроек подключения, что удобно при использовании разных временных зон.
ПС: Как вы даты(без времени) храните в int?
С datetime есть проблемы, когда нужно поддерживать часовые пояса. Если их нет, то выбор очевиден.
timestamp конвертирует даты исходя из настроек подключения, что удобно при использовании разных временных зон.
WHERE DAYOFWEEK(FROM_UNIXTIME(created_at)) IN (6,7), где created_at - int (timestamp и так работает)в пхп вычислить это можно достаточно быстро, хоть и многословнее, но итоговый sql будет включать огромный in с диапазонами.
ПС: Как вы даты(без времени) храните в int?
Re: Кто в каком виде хранит дату в мускуле?
Ответ очевиден - даты храним вместе с временемNerf писал(а):ПС: Как вы даты(без времени) храните в int?

Re: Кто в каком виде хранит дату в мускуле?
какие например?Nerf писал(а):Не вижу преимуществ хранения в int.
С datetime есть проблемы, когда нужно поддерживать часовые пояса.
и ждем пока mysql все 2000000 строк сконвертирует в datetimeNerf писал(а):WHERE DAYOFWEEK(FROM_UNIXTIME(created_at)) IN (6,7), где created_at - int (timestamp и так работает)
Re: Кто в каком виде хранит дату в мускуле?
Аа ну так то да, согласен, быстрее. Но простыми числами неудобно оперировать в нетривиальных запросах шо пипецDromok писал(а): По вашей же первой ссылке запрос вида select SQL_NO_CACHE count(id) from test_int where datetime > 1800 AND datetime < 2100; быстрее всех остальных на порядок. Об этом я и говорил, что если в запросах передавать чисто числа (то есть вся обработка дат на стороне PHP), то такие запросы намного быстрее тех, где вы передаете дату.

В простых случаях выборок + хайлоад я бы и выбрал int, но только и только в таких простых случаях.
Вот именноzelenin писал(а): в пхп вычислить это можно достаточно быстро, хоть и многословнее, но итоговый sql будет включать огромный in с диапазонами.

Вообще конечно читерствоNerf писал(а): WHERE DAYOFWEEK(FROM_UNIXTIME(created_at)) IN (6,7), где created_at - int (timestamp и так работает)

Yii Jabber Conference: yii@conference.jabber.ru
Re: Кто в каком виде хранит дату в мускуле?
Ответ очевиден - даты храним вместе с временем
Код: Выделить всё
date_default_timezone_set('Pacific/Midway');
$timestamp = strtotime('01.01.1970'); // 39600
echo date('r', $timestamp); // Thu, 01 Jan 1970 00:00:00 -1100
date_default_timezone_set('Pacific/Enderbury');
echo date('r', $timestamp); // Wed, 31 Dec 1969 23:00:00 -1200

С часовыми поясамикакие например?


Это будет дольше, чем "огромный in с диапазонами"?! Как вы этот in представляете, не могу сходу понять?и ждем пока mysql все 2000000 строк сконвертирует в datetime
Не знаю, в int не храню. Вопрос к адептам лучше перенаправить.встает очевиднейший вопрос - почему бы тогда уж сразу не хранить в виде timestamp чтобы каждый раз не конвертировать?
