Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: PHP time() vs MySQL UNIX_TIMESTAMP(NOW())

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
KingStar
Отправлено: 25 Октября, 2012 - 18:37:17
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




Я не знаю почему, но я всегда сохраняю дату в БД в unix-формате (может это покажется странным - никогда не храню в DATETIME , DATE или TIMESTAMP). И вот чет мне захотелось устроить fight между php и mysql, а именно проверить скорость обновления в БД таблицы с полем int(10) UNSIGNED. Тест проводился в цикле for в 1000 итераций по 5 раз.

PHP time() :
PHP:
скопировать код в буфер обмена
  1. UPDATE `table` SET `time` = ".time()." WHERE `id` = 1

Результат:

12.686094045639
12.703804016113
12.533060073853
12.259868860245
12.728137969971




MySQL UNIX_TIMESTAMP(NOW()) :
PHP:
скопировать код в буфер обмена
  1. UPDATE `table` SET `time` = UNIX_TIMESTAMP(NOW()) WHERE `id` = 1

Результат:

14.815867185593
14.972531080246
12.894811153412
14.820999145508
14.356331110001


-----
То что программа работает, не означает что она написана правильно!
 
 Top
OrmaJever Модератор
Отправлено: 25 Октября, 2012 - 18:45:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




А смысл? Поля DATETIME , DATE или TIMESTAMP дают кучу возможностей по форматированию и сравниванию даты, а что может простая метка в int поле?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
KingStar
Отправлено: 25 Октября, 2012 - 18:52:03
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




OrmaJever честно - не могу ответить на твой вопрос, вот не нравится мне чем-то, и все тут Хм

нивкоем случае я не говорю что они плохи, просто мне так больше нравится, привык, приучили Подмигивание


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Мелкий Супермодератор
Отправлено: 25 Октября, 2012 - 18:53:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




А можно ещё раз, но без бесполезной здесь функции UNIX_TIMESTAMP, только отнимающей время?


-----
PostgreSQL DBA
 
 Top
Okula
Отправлено: 25 Октября, 2012 - 18:54:12
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Давно перестал хранить метку времени как дату чего-либо. MySQL даёт богатый и гибкий функционал для работы с датой.
Храню дату в формате TIMESTAMP, запись произвожу через CURRENT_TIMESTAMP()
 
 Top
KingStar
Отправлено: 25 Октября, 2012 - 18:57:26
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




Мелкий пишет:
А можно ещё раз, но без бесполезной здесь функции UNIX_TIMESTAMP, только отнимающей время?


впервые слышу, что NOW возвращает метку Не понял Не понял Не понял
(Добавление)
Цитата:
в БД таблицы с полем int(10)


-----
То что программа работает, не означает что она написана правильно!
 
 Top
EuGen Администратор
Отправлено: 25 Октября, 2012 - 19:02:46
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




В Mysql 5 и выше при хранении даты в TIMESTAMP, она автоматически конвертируется из текущей временной зоны в UTC, а так же конвертируется обратно при получении.
Этим может объясняться то, что запросы с использованием TIMESTAMP будут выполняться медленнее, чем с DATETIME.
Пример бенчмарка:

Кроме этого, существует ограничение в TIMESTAMP, связанное с предельным 32-битным целочисленным значением (известный "кризис 2038-го"), для DATETIME же такое значение будет равно 9999-12-31, что трудно достижимо.
TIMESTAMP при этом имеет полезную возможность в виде обновления (ON UPDATE CURRENT_TIMESTAMP и DEFAULT CURRENT_TIMESTAMP), что может быть важным при определенной бизнес-логике.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Okula
Отправлено: 25 Октября, 2012 - 19:14:48
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




EuGen, думаю со временем "кризис 2038" года будет решён, до этого времени БД MySQL переживёт ещё не одну версию, а может быть что то более универсальное придумают.
 
 Top
caballero
Отправлено: 25 Октября, 2012 - 19:18:42
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




предпочитаю datetime

во первых напрягает когда БД чего то там конвертит без моего ведлма
во вторых timestamp не дает хранить NULL а иногда это нужно по бизнес логике


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
KingStar
Отправлено: 25 Октября, 2012 - 19:23:18
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




Okula пишет:
EuGen, думаю со временем "кризис 2038" года будет решён, до этого времени БД MySQL переживёт ещё не одну версию, а может быть что то более универсальное придумают.


до этого времени уже все пеерсядем за 64-x битные Радость Радость Радость


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Мелкий Супермодератор
Отправлено: 25 Октября, 2012 - 19:41:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




KingStar пишет:
впервые слышу, что NOW возвращает метку

Верно, NOW() - возвращает Y-m-d H:i:s
Вот только TIMESTAMP такую запись сам жуёт.


-----
PostgreSQL DBA
 
 Top
EuGen Администратор
Отправлено: 25 Октября, 2012 - 19:54:31
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Мелкий пишет:
Вот только TIMESTAMP такую запись сам жуёт.

Порождая, кстати, конвертацию при сравнении (еще один пункт в потерю быстродействия, если уж быть придирчивым)
Okula пишет:
а может быть что то более универсальное придумают

Придумают, разумеется. Скорее всего, введут более высокую разрядность. Я лишь описал текущий тип данных.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
dubasua
Отправлено: 25 Октября, 2012 - 20:07:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Лично я всегда создаю поле int(10). А потом конвертиш как нужно под разные нужды. И знаний особо никаких не нужно. И зачем держать в голове кучу функция lдля работы с датой, которые легко решаются простыми арифметическими действиями.
OrmaJever пишет:
А смысл? Поля DATETIME , DATE или TIMESTAMP дают кучу возможностей по форматированию и сравниванию даты, а что может простая метка в int поле?

Лично мне на моей практике ни разу не выпадало такое, что нельзя было бы решить обычным INT(10). Ну мне наоборот так проще, допустим я не знаю как вычислить количество дней между двумя датами в формате DATE, а в INT(10) все просто, от большего отнял меньшее, перевел разницу секунд в дни и все. И так решается большинство задач. Короче я считаю его "Дедовским" и безотказным методом, я ставлю плюс на сторону INT(10)

(Отредактировано автором: 25 Октября, 2012 - 20:07:43)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB