2010-06-01 2 views
17

Можно создать дубликат:
datetime vs timestamp?Отметка времени Unix VS DateTime

У меня есть Mysql таблицу, которая содержит столбец add_date. Он отслеживает дату/время, когда запись была добавлена ​​в базу данных.

Запросы на основе этой таблицы: 2 часа назад, 4 недели назад, 1 год назад и т.д.

  • Разрешить пользователям осуществлять поиск записей, вставленных в любой день: когда запись была добавлена ​​в формате

    1. Display /месяц год. Таким образом, пользователю может быть разрешено выбирать записи только в 2009 году.

    Что было бы лучше в этом случае - временная отметка unix или дата?

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

    Unix timestamp, похоже, лучше для преобразования в 2 hours назад формат в PHP, а также он не зависит от времени. Но datetime имеет лучшую читаемость, и сделать запрос для конкретной даты/времени/года представляется проще.

    Ваше предложение?

  • ответ

    14

    Если у вас есть выбор, я бы сказал, что выходите на даты mySQL.

    • Вы не должны заботиться о date range issue s

    • Вы можете легко запросить время пролетов с помощью функцию MySql даты (BETWEEN(), DATE_ADD и т.д.)

    • связанной Даты запросов будет намного быстрее , особенно если у вас есть миллионы записей, потому что вам не придется использовать FROM_UNIXTIME(), которые могут быть дорогими в больших запросах

    • Это чи ld, чтобы преобразовать поля DATE в отметки времени UNIX, когда это необходимо.

    +2

    Это. Просто используйте UNIX_TIMESTAMP (your_column), если вы хотите играть с меткой времени на конце php. Но в вашей базе данных используйте собственный тип даты для хранения дат. Более того, данные в вашей базе данных могут использоваться другими приложениями, которые могут предпочесть формат даты SQL, чем временные метки. – Arkh

    +0

    Будет ли какая-либо проблема конвертировать дату в временные метки unix по отношению к часовому поясу? – Yeti

    +1

    @Lost_in_code хороший вопрос на самом деле. Существует ряд факторов, настройка часового пояса mySQL-сервера и настройка часового пояса системы, которые PHP будет использовать по умолчанию. В общем, поля mySQL DATETIME не чувствительны к часовому поясу. Пока вы сохраняете даты UTC, вы должны иметь возможность легко преобразовывать их в метки времени, но будьте осторожны, если mySQL и/или PHP имеют часовые пояса, отличные от UTC. Связано: http://stackoverflow.com/questions/18449/dealing-with-php-server-and-mysql-server-in-different-time-zones –

    4

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

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

    oh my.
    Вы действительно обеспокоены в 4 дополнительных мегабайтах пространства?

    +0

    Я не знаю, сколько места это займет (я новичок в больших базах данных). Если вы скажете, что это всего лишь пара MB, то я не вижу проблемы с обоими. – Yeti

    +0

    Если вы не указали номер, не стоит упоминать об этом. Ни один программист не должен догадываться. Это работа синоптиков. http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html сообщит вам, что datetime принимает 8 байтов и int для отметки времени - 4. поэтому, 4 * 1000000 = менее 4Mb –

    +1

    Вы, Вероятно, вы захотите использовать индекс и для обоих полей. Это не слишком дорого, но если вы используете несколько индексов полей, это может повлиять на вашу производительность. – Kaivosukeltaja

    3

    Вы можете получить лучшее из обоих миров, используя временную метку unix и функцию MySQL from_unixtime(), чтобы преобразовать результат в формат даты и времени, где это необходимо.

    +1

    Вы также можете получить лучшее из обоих миров, используя datetime и используя функции даты, чтобы конвертировать в временные метки unix, когда это необходимо. Учитывая, что использование типов данных datetime облегчает многие запросы, я бы сказал, что лучше идти именно так. –

    +0

    Что говорит Эль-Йобо. Потенциальная потеря производительности - это то, что заставило бы меня уклониться от 'from_unixtime()' в больших таблицах (хотя у них нет тестов). –

    +0

    Конечно, from_unixtime() не следует использовать в запросах, которые, как ожидается, приведут к большим количествам данные, только те, которые возвращают наборы результатов, предназначенные для отображения. Кроме того, типы datetime еще могут использоваться, чтобы сделать запросы более читаемыми с помощью unix_timestamp ('2010-06-01 13:00'). Преобразование выполняется только один раз для каждого запроса, поэтому нет потери производительности. – Kaivosukeltaja

    Смежные вопросы