RECURSIVE EXECUTION

Зорин Е.В.
Дата: 20.11.2008 15:38:55
Здравствуйте!

При выполнении следующего запроса в плане выполнения появляется RECURSIVE EXECUTION, вследствие чего увеличивается время выполнения запроса. (Oracle 9i)

with af as
(
select /*+ materialize */
well.well_s ,
well.well_id,
pef.start_time,
pef.bsasc_source,
pef.quantity_value,
pef.string_value,
pef.p_equipment_fcl_s
from well,
equipment_insl ei,
p_equipment_fcl pef
where well.well_s = ei.facility_s
and ei.equipment_item_s = pef.object_s
and pef.bsasc_source in
(
'accumulation time',
'action code',
'annular pres',
'chemical concentration',
'chlorinity',
'choke diameter',
'current well role',
'dynamic fluid level',
'intake pres',
'lift method',
'manifold pres',
'pump current strength',
'pump resistance',
'pump voltage',
'shutdown reason',
'well status',
'wellbore pres',
'wellhead pres',
'wellhead temp'
)
)
select * from af
where af.start_time between &pStartDate and &pEndDate

Аналог вышеприведённого запроса:

select /*+materialize*/
well.well_s ,
well.well_id,
pef.start_time,
pef.bsasc_source,
pef.quantity_value,
pef.string_value,
pef.p_equipment_fcl_s

from well,
equipment_insl ei,
p_equipment_fcl pef
where well.well_s = ei.facility_s
and ei.equipment_item_s = pef.object_s
and pef.bsasc_source in
(
'accumulation time',
'action code',
'annular pres',
'chemical concentration',
'chlorinity',
'choke diameter',
'current well role',
'dynamic fluid level',
'intake pres',
'lift method',
'manifold pres',
'pump current strength',
'pump resistance',
'pump voltage',
'shutdown reason',
'well status',
'wellbore pres',
'wellhead pres',
'wellhead temp'
)
and pef.start_time between &pStartDate and &pEndDate

Второй вариант работает во сто крат быстрее. Знает ли кто причину появления RECURSIVE EXECUTION, если да, то как от неё избавиться?
Zloxa
Дата: 20.11.2008 16:45:36
Зорин Е.В.,

Убрать --+ materialize. ЗАчем Вам тут материализациия?
Если подзапрос будет Inline, есть шанс, что оптимизатор его раскроет спустит в него условие where
Зорин Е.В.
Дата: 21.11.2008 07:47:31
Вместо --*+ materialize воткнул --*+ inline, помогло, но время выполнения аналогичного запроса, только без конструкции with в два раза меньше :(( Можно ли эту разницу нивелировать вообще?
Зорин Е.В.
Дата: 21.11.2008 08:01:27
Самое главное - планы запросов с with и без при использовании --*+ inline одинаковы! А время выполнения отличается примерно в 2 раза. В чём подвох?