Поиск по нескольким таблицам

bigramx

Новичок
Поиск по нескольким таблицам

Доброго времени суток.

Прошу подсказать как лучше сделать поиск по нескольким таблицам? Суть примерно такова:
1) Есть основная таблица users с полями user_id, user_name, user_logined, user_last_action_time.

2) Есть несколько связанных таблиц. Например,
таблица biometrics: user_id, user_age, user_sex, user_hairs_color
и
таблица profile: user_id, user_single_state, user_country, user_city.


Необходимо сделать поиск по всем полям этих таблиц. в один результирующий запрос. Что есть сейчас:

PHP:
SELECT * FROM `users`
LEFT JOIN `biometrics` ON (`biometrics`.`user_id` = `users`.`user_id`)
LEFT JOIN `profile` ON (`profile`.`user_id` = `users`.`user_id`)
WHERE `profile`.`user_single_state`='1' AND `profile`.`user_country`='Russia' AND `biometrics`.`user_hairs_color`='Блондин' AND `users`.`user_name` LIKE 'bigramx%' AND `users`.`user_logined`=1 AND `users`.`last_action_time`>".(time()-60*10)." ORDER BY `users`.`user_name` ASC
Ну а проблема в том, что сейчас такое решение работает, но кол-во пользователей приближается к миллиону, а в будущем может быть и несколько миллионов. Да ещё и перед этим запросом идёт подсчёт кол-ва найденных пользователей.

PHP:
SELECT COUNT(*) AS `users_num` FROM `users`
LEFT JOIN `biometrics` ON (`biometrics`.`user_id` = `users`.`user_id`)
LEFT JOIN `profile` ON (`profile`.`user_id` = `users`.`user_id`)
WHERE `profile`.`user_single_state`='1' AND `profile`.`user_country`='Russia' AND `biometrics`.`user_hairs_color`='Блондин' AND `users`.`user_name` LIKE 'bigramx%' AND `users`.`user_logined`=1 AND `users`.`last_action_time`>".(time()-60*10)."
И уже не понятно как со всем этим жить. Индексирование - тоже проблема, т.к. данные могут меняться постоянно, по желанию самих пользователей, хотя, конечно, вряд ли кто-то из пользователей будет каждые пять минут менять себе эти данные и индексировать их раз в 6 часов вполне возможно...

Может кто знает более красивое решение данной проблемы?

Заранее благодарю за помощь и советы!
 

Армян

Новичок
Почему бы не перенести поля из biometrics, profile в таблицу users. Так ведь будет намного быстрее работать вроде
 

bigramx

Новичок
Проблема в том, что за исключением поиска и отображения личной страницы, поля из profile и biometrics нигде не используются.

Зато таблица users используется очен часто и по многу раз на одной странице. Поэтому я итак стараюсь её максимально облегчить, т.к. она уже под 20 метров, а дальше будет ещё хуже, а вот реальные аналоги profile и biometrics уже размеров за 50 мб, т.к. в них гораздо больше полей, чем я тут показал и в большинстве своём это текстовые поля.
 

Армян

Новичок
мб совместить таблицы profile и biometrics? Вобщем надо пробовать а не гадать :)
 
Сверху