У меня есть запрос, который занимает много времени, чтобы закончить в Oracle.Он работал несколько часов, прежде чем я его убил.Можно ли как-нибудь ускорить его?
Вот мой запрос:
select distinct(random_selection.randnum),
random_selection.dropper_id,
random_selection.ozip3
from random_selection
where random_selection.dropper_id is not null
and random_selection.quarter = 121
and (random_selection.dropper_id, random_selection.randnum, random_selection.quarter) in
(select forecast_entry.dropper, forecast_entry.rand_num, production_weeks.yyq
from forecast_entry, production_weeks
where forecast_entry.week = production_weeks.production_week
and production_weeks.project_cd = 'EXFC'
and production_weeks.yyq >= 121)
union
select distinct(random_selection.randnum),
dropper_city_brk_2.dropper_id,
random_selection.ozip3
from random_selection, dropper_city_brk_2, dropper
where random_selection.ozip3 = dropper_city_brk_2.zip3
and dropper.dropper_id = dropper_city_brk_2.dropper_id
and dropper.active = 1
and dropper_city_brk_2.dropper_id <> 10002
and random_selection.quarter = 121
and random_selection.dropper_id is null
and (random_selection.dropper_id, random_selection.randnum, random_selection.quarter) in
(select forecast_entry.dropper, forecast_entry.rand_num, production_weeks.yyq
from forecast_entry, production_weeks
where forecast_entry.week = production_weeks.production_week
and production_weeks.project_cd = 'EXFC'
and production_weeks.yyq >= 121)
Запрос объяснен:
главная цель - получить все ранднум,dropper_id и ozip3 из таблицы random_selection, которых нет в таблице forecast_entry, они находятся в yyq 121 и имеют код проекта EXFC.yyq извлекается из таблицы production_weeks, связывая неделю и рабочую неделю.Некоторые dropper_id являются нулевыми, поэтому нам нужно извлечь эти данные из таблицы dropper_city_brk_2, связав ozip3 и zip3.Мы не хотим, чтобы dropper_id были неактивны, поэтому они должны иметь активное значение, равное 1, это связано с таблицей дроппера.
надеюсь, что это поможет