Какой из этих сценариев быстрее получить отформатированную дату? - PullRequest
0 голосов
/ 16 августа 2011

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

Первый сценарий:

В моей базе данных MYSQL у меня есть два столбца: datetime (тип DATETIME) и date (тип DATE).

Затем в моем скрипте PHP каждый раз, когда я сохраняю запись, я вставляю свою известную строку в поле datetime, а затем преобразую ее, чтобы она соответствовала полю date (я думал о чем-то вроде: $date = date("Y-m-d", strtotime($datetime))).

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

Второй сценарий:

База данных MYSQL должна состоять только из столбца datetime.

Мой PHP-скрипт вставит известную строку в поле datetime без каких-либо других изменений.

И когда я получаю свои данные, я делаю что-то вроде: SELECT datetime, DATE(datetime) FROM ...

Заключение

Какой из этих сценариев быстрее и, следовательно, должен использоваться? Должны ли быть сделаны форматы даты при сохранении или при получении? MYSQL быстрее, чем PHP при форматировании дат? Лучше ли хранить все в базе данных и извлекать как есть, или хранить только минимум и формат при извлечении? Какой из этих сценариев является лучшей практикой?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 16 августа 2011

Это зависит от ваших сценариев использования:

Если вам понадобится только date для чтения, а затем используйте один столбец datetime, преобразование из datetime в date дешеводостаточно.

Если вы собираетесь выбирать строки на определенную дату (например, WHERE date = '2011-08-01'), то перейдите к столбцу date, так как это позволит mysql использовать индексы для столбца dateесли вы добавили один.

Если вы собираетесь выбирать строки в диапазоне дат, перейдите к столбцу datetime.Вы можете делать такие вещи, как WHERE datetime >= '2011-08-01' AND datetime < '2011-08-16'.

1 голос
/ 16 августа 2011

Определенно зависит от вашей ситуации - если вы будете читать (много) больше, чем писать, вы можете хранить и то, и другое. Но я бы пошел для хранения одного поля (datetime) и преобразовал бы его, либо в PHP, либо извлекая его из MySQL (конвертируйте datetime в char в формате, который вам нравится)

1 голос
/ 16 августа 2011

* IMHO 1002 *

  • datetime или даже целое число без знака (временная метка unix) лучше для фильтрации по диапазонам
  • datetime разрешить функцию date-time, это может быть полезно для агрегатной функции
  • избегать форматированных данных из mysql (это означает, что они необработанные)
  • все, что связано с презентацией, является обязанностью PHP
1 голос
/ 16 августа 2011

Второй вариант самый лучший и быстрый, так как вы получаете значение на основе требований. Скорее получить некоторую ценность и работать над этим позже.

...