Выполнение операции JOIN - PullRequest
0 голосов
/ 26 мая 2020

Предположим, у меня есть две огромные таблицы

  • пользователей (user_id, name, country)
  • location (id, user_id, country, city)

Если я хочу получить данные для конкретной страны

1.

select * from users u
inner join location l on u.user_id = l.user_id 
where l.country = 'heaven'

2.

select * from users u
inner join location l on u.user_id = l.user_id 
where u.country = 'heaven'

3.

select * from users u
inner join location l on u.user_id = l.user_id
where u.country = 'heaven' and l.country = 'heaven'

Какой из трех был бы лучше подход? и предположим, что результат фильтрации данных по стране будет

  1. таблица пользователей имеет 1000 записей с country = 'heaven'

  2. таблица местоположений имеет 2 запись с country = 'heaven'

Какая будет производительность сейчас?

1 Ответ

1 голос
/ 26 мая 2020

Ваши запросы будут возвращать те же результаты, только если верно одно из следующих условий:

  • location записей не существует для всех пользователей.
  • users имеет дубликат user_id s.

Непонятно какой. И наличие country в обеих таблицах говорит о том, что с вашей моделью данных что-то не так.

Тем не менее, если вам нужна как фильтрация по join, так и фильтрация по стране, я бы порекомендовал:

select *
from users u join
     locations l
     on u.user_id = l.user_id
where l.country = 'heaven';

И вам нужен индекс locations(country, user_id). Это должно найти две записи в locations и найти соответствующие значения в users. Кажется, это самый быстрый способ сделать то, что вы хотите.

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