Присоединение или несколько запросов sql - PullRequest
1 голос
/ 09 июля 2020

Мне интересно, какой способ получения данных является наиболее эффективным (быстрым и менее трудоемким для базы данных). У меня есть 2 таблицы:

пользователи

ID | NAME 
1  | John
2  | Mike
3  | Jack

данные

USER_ID | DATA
2       | some_data_1
3       | some_data_2

Мне нужно получить значение по имени пользователя, и, насколько я понимаю, у меня есть два варианта:

  1. select id from users where name ='some_name', а затем выберите из data таблицы по идентификатору.

или

select id from users join data on users.id = data.user_id where user.name = 'some_name'

Также, я думаю, важно отметить: это пример реальных таблиц с тысячами строк и несколькими столбцами, в столбце user_id есть индекс. 1024 * table, я использую драйвер jdb c, и это сетевой вызов, и это postgreSQL, если это имеет значение.

upd. Также было бы интересно прочитать любые ссылки на исследования или любые виды работ / документов / выступлений

Ответы [ 2 ]

1 голос
/ 09 июля 2020

В общем, вы хотите, чтобы база данных выполняла как можно больше работы. В общем, базы данных работают на более сложных серверах, и было потрачено миллионы человеко-лет на оптимизаторы и на то, чтобы код работал эффективно.

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

Общий c ответ на ваш вопрос - использовать один запрос, тот, который содержит join.

Есть некоторые обстоятельства где несколько запросов имеют лучшую производительность, чем один запрос. Но в вашем случае вы ищете только одну строку или несколько строк. И база данных хорошо разработана для join. Итак, используйте единственный запрос.

0 голосов
/ 09 июля 2020

Присоединение - лучший вариант, так как он даст вам данные за один раз.

Если ваше приложение вызывает два запроса, то это будет тратой ресурсов дважды (ресурсы вашего приложения, время сети, БД синтаксический анализ и другие вещи), которых можно легко избежать с помощью одного запроса. Ресурсы будут использоваться только один раз.

Поэтому для достижения той же цели лучше использовать один запрос, чем два запроса.

Go с JOIN:

select id 
  from users 
  join data on users.id = data.user_id 
 where user.name = 'some_name' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...