Являются ли запросы выбора JDBC через одно соединение менее эффективными, чем процедура, содержащая эти запросы? - PullRequest
0 голосов
/ 15 ноября 2018

Если я открою одно соединение JDBC (для Oracle) и выполню несколько select запросов, будет ли это менее эффективным, чем вызов процедуры, которая выполняет эти запросы и возвращает результат в курсорах?

Изменить: Примеры запросов:

select id, name from animals;
select * from animal_reservoir where animal_id=id;

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

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Два основных различия:

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

Какое влияние это оказывает, полностью зависит от приложения.

И часто могут существовать другие альтернативы (например, в первую очередь выдача запросов другого типа; кто-то упоминал JOIN в комментариях - или кеширование - или индексацию - или денормализацию данных - или ... ) рассмотреть также.

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

0 голосов
/ 15 ноября 2018

Вы не предоставили SQL-запросы, которые должны использовать процедуру

Вы можете выполнить 1 запрос SQL с несколькими «внутренними SQL», используя предложение with, например:

with animals as (
select id, name from animals
)
select * from animal_reservoir,animals where animal_id=animals.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...