Вытаскивание юзеров у кого сегодня день варенья. Несколько решений...

Сенсей

Новичок
Вытаскивание юзеров у кого сегодня день варенья. Несколько решений...

Не, просить написать не буду :)

Тут вот какая итересная штука...

Я юзал

PHP:
select user_id, user_login, (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(user_last_visit))/60, user_hidden from users where DATE_FORMAT(CONVERT_TZ(user_birth_day, '-05:00', '+02:00'), '%m-%d')=DATE_FORMAT(CONVERT_TZ(CURDATE(), '-05:00', '+02:00'), '%m-%d') order by user_id DESC;
Оно работает... а ... тут сегодня попробовал -

PHP:
select user_id, user_login, (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(user_last_visit))/60, user_hidden from users where MONTH(CONVERT_TZ(user_birth_day, '-05:00', '+02:00')) = MONTH(CURDATE()) AND DAYOFMONTH(CONVERT_TZ(user_birth_day, '-05:00', '+02:00')) = DAYOFMONTH(CURDATE());
Тоже работает но, на 15K записей в базе ПЕРВЫЙ запрос выполняется за ~0.50sec а ВТОРОЙ запрос за ~0.30sec

Разница огромная.

1 - Какие еще идеи будут по комбинированию функций работы с датой дабы ускорить этот процесс?
2 - Кто то может мне объяснить почему это происходит в данном случае?
3 - Количество юзеров растет с каждым днем... хотелось бы юзать индексы при определении тех у кого сегодня день варенья... а то сейчас база проходит по всем 15k записям (explain показал)

Я вижу рещение - разделить год месяц и день рождения на разные поля...т и сделать индекс по каждому... я правильно мыслю?
 

confguru

ExAdmin
Команда форума
Ноухау... дней в году 365 - сделать отдельное поле с индексом, все будет летать :)
 

Сенсей

Новичок
у меня эта http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html чуть ли не домашней страничкой стала...

Ну вот еще можно такое
PHP:
select user_id, user_login, (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(user_last_visit))/60, user_hidden from users where dayofyear(CONVERT_TZ(user_birth_day, '-05:00', '+02:00')) = DAYOFYEAR(curdate());
Но он немногим отличается от второго запроса...

Начет использования индексов при работе с полями типа DATE я ничего не нашел :(

-~{}~ 07.11.06 22:10:

admin
Я тебя не панимать =))

Я думал создать 3 поля типа int

year | month_birth | day_birth

Но я не знаю или это правильный подход...
Мы говорим об одном и том же?
 
Сверху