Оптимизация предложения WITH в запросе oracle - PullRequest
0 голосов
/ 28 февраля 2012

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

with t1 as (select some_fields from table1 inner join table2),
     t2 as (select some_fields from t1 inner join table3),
     t3 as (select some_fields from t2 inner join table4)
select * from t3

Какой подход следует использовать для оптимизации похожих запросов?В моем случае каждый подзапрос возвращает около 10 миллионов строк.

Ответы [ 2 ]

3 голосов
/ 28 февраля 2012

При всей секретности, я предлагаю вам взглянуть на ОБЪЯСНИТЬ ПЛАН для обоих запросов.На мой взгляд, WITH - это не более чем синтаксический сахар, позволяющий вам повторно использовать определенные sql в подзапросах.Но во всей своей полезности это не всегда приводит к самому эффективному плану.

и да, 10 000 000 всегда будут медленными.

2 голосов
/ 31 марта 2017

Я подтверждаю, что WITH CLAUSE не улучшает производительность в базах данных Oracle.Он позволяет использовать только имена запросов вместо повторения всех текстов запросов.

Кроме того, он позволяет определять функции PL / SQL, которые впоследствии будут использоваться в запросе.

...