Долгий запрос к базе

Статус
Закрыто для дальнейших ответов.

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Три таблицы:
user: Содержит информацию о всех юзерах (id, логин, пол и т.д)
gallery: Содержит информацию об загруженных юзерами картинок (id, id альбома, название, путь к маленькой картинке, путь к большой картинке, приватность)
gallery_album: Содержит альбы юзеров, в которых находятся изображения
Задача:
Вывести на страницу НЕ приватные фотографии юзеров определенного пола.
За приватность отвечает поле privat в таблице gallery (1 - Видимо всем, 2 - Только друзьям, 3 - Определенным персонажам из другой таблицы)
Делаю запросы:
// Запрос для вывода изображений парней:SELECT .. FROM `gallery`JOIN `user` ON `gallery`.`id_login` = `user`.`id`JOIN `gallery_album` AS `album` ON `gallery`.`id_album` = `album`.`id`WHERE `gallery`.`privat` = 1 AND `user`.`pol` = 1ORDER BY `gallery`.`id` DESC LIMIT 5
Код:
// Запрос для вывода изображений девушек:SELECT .. FROM `gallery`JOIN `user` ON `gallery`.`id_login` = `user`.`id`JOIN `gallery_album` AS `album` ON `gallery`.`id_album` = `album`.`id`WHERE `gallery`.`privat` = 1  `user`.`pol` = 2ORDER BY `gallery`.`id` DESC LIMIT 5
Код:
// Обычный запрос и вывод всех:SELECT .. FROM `gallery`JOIN `user` ON `gallery`.`id_login` = `user`.`id`JOIN `gallery_album` AS `album` ON `gallery`.`id_album` = `album`.`id`WHERE `gallery`.`privat` = 1ORDER BY `gallery`.`id` DESC LIMIT 5
Первые два выполняются примерно ~ 7-10 секунд при 300.000 фотографиях (это ещё в основной таблице юзеров всего два пользователя только загрузил).
Как быть в данном случае? Отказаться от вывода изображений по полам?
Может быть поделить на три таблицы по приватности? gallery1 - Видимы всем, gallery2 - Только друзьям, gallery3 - Определенным персонажам. Хотя это врятле поможет, если в таблице user будет столько же пользователей.
 

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
JOIN `user` ON `gallery`.`id_login` = `user`.`id`А какой смысл этого? Что эксплаин говорит? Privat, pol, id_login наверно индексы поставить нужно, BTREE.
CREATE INDEX id_l ON `gallery` (id_login) USING BTREE; и так далее
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
AngelGabriel сказал(а):
А какой смысл этого? Что эксплаин говорит? Privat, pol, id_login наверно индексы поставить нужно, BTREE.
Для вывода логина автора картинки, а также его других некоторых характеристик. И как бы условие where тоже есть по полам, а инфа о поле содержится в этой таблице..
Вот что говорит EXPLAIN:
ScreenShot006.jpg
Кстати, если убрать ORDER BY, то запрос выполняет 0.002c
 
Статус
Закрыто для дальнейших ответов.
Верх Низ