SQL: Как проверить, существует ли связанная строка? - PullRequest
1 голос
/ 08 мая 2020

У меня есть первая таблица и связанная с ней вторая таблица с внешним ключом для первой таблицы.

Количество строк во второй таблице может варьироваться от нуля до многих миллионов строк (таймсерии data).

При отображении строк первой таблицы для конечного пользователя я хочу показать, есть ли связанные строки во второй таблице - да или нет, не больше.

В настоящее время я left присоединиться к столам и сделать счет на втором столе. Но я подозреваю, что это медленный и ресурсоемкий способ просто определить, есть ли связанные строки во второй таблице.

SELECT
    first.id,
    first.title,
    Count( second.id ) as count
FROM
    first
LEFT JOIN
    second
ON
    first.id = second.first_id
GROUP BY
    first.id
ORDER BY
    count DESC

В обеих таблицах есть индексы в первичных ключах id. База данных - это Postgr SQL.

Что является более быстрым и / или менее ресурсоемким способом go здесь?

1 Ответ

2 голосов
/ 08 мая 2020

Я бы сделал это с помощью скалярного подвыбора, а не соединения:

select f.*, 
       exists (select * from second s where s.first_id = f.id) as rows_in_second_exists
from first

Оператор exists перестанет смотреть во вторую таблицу, как только будет найдена строка. Индекс на second (first_id) ускорит это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...