nulldef
@nulldef
Senior Software Developer

Как реализовать JOIN для таблиц в двух БД?

Добрый день.
Есть 2 таблицы, расположенные на двух разных базах (MySQL) на разных серверах. Нужно выполнить запрос
SELECT a.title FROM a JOIN b ON a.b_id = b.id
Можно, конечно, выполнить сначала
SELECT a.title, a.b_id FROM a
и потом
SEELCT b.id FROM b
и с помощью циклов сделать объединение, но, по моему, это будет слишком тяжело для баз. Может есть еще какое-то решение этой проблемы?
  • Вопрос задан
  • 5655 просмотров
Решения вопроса 1
nowm
@nowm
но, по моему, это будет слишком тяжело для баз

Чтобы для баз было легче, просто сделайте индексы на тех полях, по которым происходит объединение. Один джоин это ещё не «слишком тяжело». Но если вы думаете, что, после запроса с одним джоином, SQL-сервер выйдет из строя на полгода раньше, надорвётся и начнёт глючить, или во время этого запроса будет потреблять электроэнергию, как 100 сварочных аппаратов, то, конечно, можно сделать два запроса, на которые потратится время, а потом потратить время ещё и на цикл в PHP.

Вообще, лучший способ: замерьте время, которое вам понадобится на то, чтобы получить данные запросом с джоинами, а так же время, которое понадобится для того, чтобы получить данные двумя запросами и с помощью циклов в PHP их объединить. Для чистоты эксперимента, можно вычислять среднее время на 1000 или больше повторений.

Если у вас базы данных находятся на разных серверах, как вы написали, то самый простой способ — выбрать из каждой таблицы данные отдельно, и уже в PHP сделать объединение. Либо можно использовать FEDERATED таблицы.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@gro
для баз это как раз будет легко, для циклов сложно. замерьте, что быстрее у вас выйдет.
Ответ написан
@gro
ну, только не
SELECT b.id FROM b
а
SELECT ... FROM b WHERE id IN (список b_id полученных из a)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы