mysql — медленно ли использовать функцию PHP date () для сравнения с полями SQL datetime?

У меня есть этот веб-сайт, на котором я могу создавать столько постов в день, которые называются «clippets», и прежде чем проверять ограничение, я использовал некоторый SQL, чтобы получить общее количество «clippets» в текущий день.

Допустим, я хочу разрешить пользователям делать 20 «клипов» в день, не основываясь на времени, а только на дне, как если бы я основывал его на последних 24 часах, как если бы пользователь гонялся за лимитом. время…

Во всяком случае, вот мой SQL:

$date = date("Y-m-d");

$sql = "SELECT COUNT(id) FROM clippets WHERE userID = ? AND DATE(createdAt) = '$date'; ";

Мой вопрос … Это медленный способ приблизиться к этому, используя функцию даты PHP, а затем используя ее в запросе SQL, обрабатывает ли она их как строки или? Поскольку поле createAt является типом данных datetime, поэтому MySQL преобразует обе даты в строки и затем сравнивает их? Это медленный способ сделать это?

-1

Решение

MySQL не преобразует обе даты в строки для сравнения. Он преобразует строку в дату один раз и использует ее для всех других сравнений. Передача параметра даты в виде строки является стандартной практикой, и попытка сделать что-то еще вместо этого не будет хорошим источником оптимизации.

Однако, если вас интересует только текущая дата, вам вообще не нужно передавать параметр для этой даты. Вы можете использовать функции даты MySQL, чтобы выбрать нужные вам строки. Один из подходов в этот вопрос или же этот вопрос должно сработать.

Например:

SELECT COUNT(id) FROM clippets WHERE userID = ? AND createdAt >= CURDATE()
1

Другие решения

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

where createdAt >= yourDateVariable
and createdAt < the day after yourDateVariable
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector