MySQL Date Query Optimization - PullRequest
       11

MySQL Date Query Optimization

0 голосов
/ 01 апреля 2012

любые идеи о том, как оптимизировать следующий запрос:

SELECT ip FROM clicks 
WHERE ip = ? 
AND SECOND(date_clicked)+4 > SECOND(NOW()) 
AND MINUTE(date_clicked) = MINUTE(NOW()) 
AND HOUR(date_clicked) = HOUR(NOW()) 
AND DATE(date_clicked) = DATE(NOW())

Я имею в виду, было бы здорово сократить количество проверок ДАТА / ВРЕМЯ, если это возможно. Основная цель этого запроса - узнать, произошел ли клик с определенного IP в течение 4 секунд.

ура, / Marcin

1 Ответ

3 голосов
/ 01 апреля 2012

Вам нужен только один вызов DATE_ADD(), чтобы проверить, превышает ли сохраненная дата в date_clicked плюс 4 секунды текущую метку времени (NOW()).

SELECT 
  ip 
FROM clicks
WHERE ip = ?
  AND DATE_ADD(date_clicked, INTERVAL 4 SECOND) > NOW() 

Обновление

Я бы просто добавил, что на практике это работает не очень хорошо.Многие пользователи делятся IP-адресами.В этой системе два пользователя с одним и тем же NAT-адресом в школе или сети не смогут щелкать в течение 4 секунд.Было бы лучше сохранить какое-либо идентифицирующее пользователя значение, например, токен из куки-файла сеанса или ИД пользователя, чем хранить IP-адрес и основывать время ожидания на IP-адресе.

...