Пакетная выборка Eclipselink VS объединенная выборка

Когда мне следует использовать "eclipselink.join-fetch", а когда - "eclipselink.batch" (тип партии = IN)?

Существуют ли какие-либо ограничения на выборку соединений, например количество извлекаемых таблиц?

1 ответ

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

Join-fetch - это именно то, что он говорит, заставляя все данные возвращаться в одном запросе. Если ваша цель - уменьшить количество операторов SQL, это идеально. Но это связано с расходами, так как внутренние / внешние соединения, декартовы соединения и т. Д. Могут увеличить объем передаваемых данных и работу, которую должна выполнять база данных.

Пакетная выборка - это один дополнительный запрос (1+1), который может быть выполнен несколькими способами. IN собирает все значения внешнего ключа и помещает их в один оператор (больше, если у вас>1000 на oracle). Соединение похоже на соединение выборки, поскольку оно использует критерии из исходного запроса для выбора отношения, но не возвращает столько данных, сколько выбирает только необходимые строки. EXISTS очень похож на использование подзапроса для фильтрации.

Другие вопросы по тегам