2012-02-28 6 views
0

Когда я использую много предложений WITH в запросе, он выполняет больше времени, а не без него. структура запроса, как это:Оптимизация предложения «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

Это зависит от запроса! Чтобы поддержать вас, отправьте свой запрос! Если у вас разные версии вашего запроса (с условием 'WITH' и без него, разместите их все! – Tim

+3

Какова ваша альтернатива этому утверждению, которая быстрее? Можете ли вы опубликовать его тоже, пожалуйста! Обычно для базы данных Oracle нет никакой разницы, если вы используете 'WITH'clause или нет! – Tim

+0

Я не могу сделать это в соответствии с политикой (спасибо, попробуй понять себя – DmitryB

ответ

3

С учетом всей секретности я предлагаю вам взглянуть на EXPLAIN PLAN для обоих запросов. На мой взгляд, WITH - это не что иное, как синтаксический сахар, позволяющий повторно использовать определенный sql в подзапросах. Но во всей его полезности это не всегда приводит к самому эффективному плану.

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

2

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

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

Смежные вопросы