оптимизация запросов - PullRequest
       13

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

0 голосов
/ 23 февраля 2010

У меня есть запрос вида

ВЫБРАТЬ uid1, uid2 ОТ друга, ГДЕ uid1 IN (ВЫБРАТЬ uid2 ОТ друга, ГДЕ uid1 = '. $ User_id.') И uid2 IN (ВЫБРАТЬ uid2 ОТ друга, ГДЕ uid1 = '. $ User_id.')

Проблема в том, что вложенный запрос

ВЫБЕРИТЕ uid2 ОТ ДРУГОГО ГДЕ uid1 = '. $ User_id.'

возвращает очень большое количество идентификаторов (около 5000).

Структура таблицы таблицы друзей: uid1 (int), uid2 (int). Эта таблица используется для определения того, связаны ли два пользователя как друзья.

Есть ли обходной путь? Могу ли я написать запрос по-другому? Или есть какой-то другой способ решить эту проблему. Я уверен, что я не первый, кто сталкивается с такой проблемой.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 23 февраля 2010

Вы можете исключить один подзапрос, используя одно соединение с оператором OR.

Однако, чтобы исключить любые двойные строки, вам нужно будет вернуть только DISTINCT строк.

SELECT DISTINCT f1.uid1, f1.uid2 
  FROM friend AS f1 INNER JOIN 
    friend AS f2 ON (f1.uid1 = f2.uid2 OR f1.uid2 = f2.udi) 
  WHERE f2.uid1='.$user_id.'
...