Константин
Добрай день!
Есть 3 таблицы - Users, Cities и UserCities. Которые представляют из себя людей и города. UserCities содержит информацию об посещенных человеком городах.
Нужно написать запрос, который возвращает людей и города в которых они побывали.
Рассмотрим крайний случай - 300 людей и 300 городов, каждый человек был в каждом городе.
Т.е. в ответе будет 90000 строк. Наивная реализация выполняется за 2.1сек:
SELECT u."Id", u."Name", t."Name"
FROM "Users" AS u
JOIN (
SELECT uc."CityId", uc."UserId", c."Name"
FROM "UserCity" AS uc
JOIN "Cities" AS c
ON uc."CityId" = c."Id"
) AS t ON u."Id" = t."UserId";
Как можно оптимизировать запрос?
никак, без фильтров вы все написали, не понятно зачем внутренний запрос когда все можно было написать в один слой, но и это будет работать.