2015-04-19 4 views
1

Чтобы проанализировать даты и время, я создаю таблицу MySQL, где я хочу хранить информацию о времени. Некоторые примеры анализов будут такие вещи, как:Как эффективно записывать данные для целей анализа?

  • итемов за день/неделю/месяц/год
  • товары в будний
  • Items в час
  • т.д.

Сейчас в отношении производительность, каким образом я должен записывать данные в своих данных:

  1. тип даты: Unix tim эстамп?
  2. Тип даты: дата и время?
  3. или хранить информацию о дате в одной строке каждый, например. year, month, day в отдельных полях?

Последнее, например, было бы удобно, если я буду анализировать по будням; Мне не пришлось бы выполнять WEEKDAY(item.date) на MySQL, но он мог бы просто использовать WHERE item.weekday = :w.

ответ

2

Основываясь на вашем использовании, вы хотите использовать собственный формат datetime. Форматы Unix наиболее полезны, когда основными операциями являются (1) заказ; (2) принимая разницу в секундах/минутах/часах/днях; и (3) добавление секунд/минут/часов/дней. Например, они должны быть преобразованы во внутренние форматы даты, чтобы получить, например, месяц или неделю.

У вас также есть потенциальная проблема с индексацией. Если вы хотите выбрать диапазоны дней, часов, месяцев и т. Д. Для своих результатов, то вам нужен индекс в столбце. Для этой цели индекс на datetime равен , вероятно,.

Если резюме по часам, вам может быть полезно сохранить компонент даты в поле даты и в часах в отдельной колонке. Это было бы особенно полезно, если бы вы совмещали часы с разных дней.

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

2

Правило большого пальца: храните вещи так, как они должны храниться, не делайте улучшения производительности, пока не столкнетесь с узким местом. Если вы сохраняете свою дату как отдельные поля, вы, в конце концов, столкнетесь с ситуацией, в которой вам нужна эта дата в целом внутри вашей базы данных (например, запрос обновления для определенного диапазона времени), и это будет похоже на ад - условие from 3 april 2015 till 15 may 2015 будет насколько это возможно.

Вы должны хранить свои даты как тип даты. Это предоставит вам максимальную гибкость (скорее всего) для чтения запросов и сохранит все ваши возможности для работы с ними. Единственное, что я могу порекомендовать, это сохранить в следующих столбцах одну и ту же дату, разделенную на год/месяц/день, - конечно же, это раздует вашу базу данных и потребует особой осторожности при обновлении сценариев, но это позволит вам использовать любой вариант источника данных в ваших запросах.