SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.09.2012 13:51:15

uaproducer
Участник
Зарегистрирован: 25.09.2012
Сообщений: 4

Оптимизация запроса

Есть запрос, вычисляющий возможных друзей:

SELECT friends.to_id
FROM friends
WHERE friends.from_id IN (SELECT to_id FROM friends WHERE from_id = \''.$user_id.'\')
  AND friends.to_id NOT IN (\''
.$user_id.'\')
  AND friends.to_id NOT IN (SELECT to_id FROM friends WHERE from_id = \''
.$user_id.'\')
GROUP BY friends.to_id
ORDER BY 2 DESC, 4 DESC, 3 ASC
LIMIT 30


Как его можно оптимизировать, ато эти вложенные selectЫ очень долго выполняются...??

ЗЫ: from_id - id инициатора дружбы, to_id - id человека, с которым хотят дружить.

Неактивен

 

#2 25.09.2012 15:00:47

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Оптимизация запроса

Избавится от подзапросов в in(), переписав через join. Или использовать MariaDB, в которой подзапросы оптимизированы.

Неактивен

 

#3 25.09.2012 15:51:46

uaproducer
Участник
Зарегистрирован: 25.09.2012
Сообщений: 4

Re: Оптимизация запроса

Может кто-нибудь переписать мне запрос через join? У меня не получается! sad

Неактивен

 

#4 26.09.2012 11:27:27

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Оптимизация запроса

SELECT friends.to_id
FROM friends f
JOIN (SELECT DISTINCT to_id FROM friends WHERE from_id = \''.$user_id.'\') t1 ON f.from_id=t1.to_id
JOIN (SELECT DISTINCT to_id FROM friends WHERE from_id = \''
.$user_id.'\') t2 ON f.to_id<>t2.to_id
WHERE f.to_id NOT IN (\''
.$user_id.'\')
GROUP BY friends.to_id;

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson