Следует ли избегать внешних соединений в DB2 - PullRequest
4 голосов
/ 02 марта 2010

Мы ведем дискуссию в нашей компании. Я часто использую левые внешние соединения. Другой программист сказал мне, что слишком много накладных расходов, и я не должен их использовать. Например, скажем, у меня есть две таблицы, они бы предпочли, чтобы я дважды нажимал на базу данных, получал необходимую информацию из каждой таблицы, сохранял ее в памяти и объединял данные на стороне Java, а не просто выполнял левое внешнее соединение. Я думаю, что это абсурдно и будет плохо для производительности. Я не прав

Ответы [ 3 ]

4 голосов
/ 02 марта 2010

Вы не ошиблись. Использование объединения, скорее всего, будет более эффективным. Это то, что базы данных хороши.

3 голосов
/ 07 марта 2010

Раньше мы делали соединения в приложении, а не в базе данных, иногда еще в 80-х годах. Но на самом деле, к 1988 году или около того, оптимизатор базы данных был достаточно хорош с DB2, и в этом больше не было необходимости.

Я не могу вспомнить какие-либо обычные сценарии, которые требуют присоединения приложений. Ненормальные ситуации, например, когда у вас есть перегруженный сервер базы данных, толстый сетевой канал, тонна емкости на сервере приложений и куча новых запросов, могут оправдать это для некоторых запросов. Может быть.

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

2 голосов
/ 02 марта 2010

Я считаю, что вам следует избегать попадания в базу данных дважды, когда вам это не нужно. Я не вижу, где левое соединение было бы большей проблемой, чем запрос данных дважды. Если FK не проиндексированы, может возникнуть проблема с производительностью, но это плохой дизайн, а не ошибка левых соединений.

В конечном итоге тот или иной объем данных должен быть возвращен тем или иным способом, и базы данных предназначены для использования объединений.

Тем не менее, может случиться так, что то, как вы пишете запросы, может быть неэффективным (использование левых объединений, когда требуются внутренние объединения, или присоединение к таблицам, которые вообще не нужны), не видя их, я не могу знать, что ,

...