В pg есть проблема по расчету ожидаемого кво строк с несколькими предикатами (нет статистики по кореляции значений полей, поэтому просто перемножает селективности) из за которой после некоторых соединений ожидаемое кво строк = 1 (это минимум). Понятно что дальше идет nested loop... А по факту потом по миллиону раз (сам видел)...
:( Получается план с двумя вложенными субпаланами, в последнем 800тыс loop, потом на субплане 2 уровня еще 25тыс, и в итоге пользователи ждут результата в подборе 8сек на каждый поиск
но hash semi join вроде норм спасает