MySQL кеш и дата функции - PullRequest
6 голосов
/ 18 января 2011

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

пример:

$query = 'SELECT id FROM table WHERE publish_date = \''.date('Y-m-d').'\'';

против

$query = 'SELECT id FROM table WHERE publish_date = CURDATE()';

Ответы [ 3 ]

7 голосов
/ 18 января 2011

Любая функция, содержащая CURDATE(), не будет кэшироваться. Источник

Насколько я могу судить, жёсткое кодирование даты всё ещё должно кэшироваться. Хотя вы, возможно, захотите использовать функциональность prepare вместо того, чтобы объединять строки в запросе (для обеспечения безопасности и безопасности).

2 голосов
/ 18 января 2011

Это довольно просто на самом деле.Сервер MySQL не видит ваш PHP-код, поэтому он получит один из них:

SELECT id FROM table WHERE publish_date = '2010-01-18';
SELECT id FROM table WHERE publish_date = CURDATE();

Он также не будет читать ваши намерения.Для MySQL '2010-01-18' является строкой и является детерминированным: ее значение всегда равно «2010-01-18».Однако CURDATE() не является детерминированным: его значение варьируется в зависимости от даты его запуска.Таким образом, первый кешируется, а второй нет.

0 голосов
/ 18 января 2011

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

локальное время в вашем скрипте PHP будет применяться в SQL

...