I have the following query to be executed for my project:
SELECT fcr.request_id,
DECODE
(fcpt.user_concurrent_program_name,
'Report Set', fcr.description,
'Request Set Stage', fcr.description,
fcpt.user_concurrent_program_name
) user_concurrent_program_name,
fcr.description, fcr.argument_text, fcr.concurrent_program_id,
fcr.parent_request_id, fcr.actual_start_date,
fcr.actual_completion_date,
ROUND ( (fcr.actual_completion_date - fcr.actual_start_date)
* 24
* 60,
4
) runtime,
DECODE (fcr.phase_code, 'C', 'No Schedule') program_status,
fu.user_name, frt.responsibility_name, fcr.logfile_name
FROM [email protected]_link fcr,
[email protected]_link fcpt,
[email protected]_link fu,
[email protected]_link frt
WHERE fcr.concurrent_program_id = fcpt.concurrent_program_id
AND fcr.requested_by = fu.user_id
AND fcr.responsibility_id = frt.responsibility_id
AND fcr.responsibility_application_id = frt.application_id
AND fcr.actual_completion_date >= (SELECT MAX (alert_logged_time)
FROM allen.main_table
WHERE program_status = 'No Schedule')
AND fcr.phase_code = 'C';
But the above query takes too long to run. When I give the corresponding time as input, instead of
SELECT MAX (alert_logged_time)
FROM allen.main_table
WHERE program_status = 'No Schedule'
I get the output very soon even. why is that so? Anyway to rectify this?
The following recommendations will help you in your SQL tuning process.
You'll find 3 sections below:
CREATE INDEX fnd_programs_idx_concurrent_id ON fnd_concurrent_programs_tl (concurrent_program_id);
CREATE INDEX fnd_requests_idx_phase_concur_reques_respon_respon ON fnd_concurrent_requests (phase_code,concurrent_program_id,requested_by,responsibility_id,responsibility_application_id);
CREATE INDEX fnd_tl_idx_responsibility_application_id ON fnd_responsibility_tl (responsibility_id,application_id);
CREATE INDEX fnd_user_idx_user_id ON fnd_user (user_id);
CREATE INDEX main_table_idx_alert_time ON main_table (alert_logged_time);
SELECT
fcr.request_id,
DECODE(fcpt.user_concurrent_program_name,
'Report Set',
fcr.description,
'Request Set Stage',
fcr.description,
fcpt.user_concurrent_program_name) user_concurrent_program_name,
fcr.description,
fcr.argument_text,
fcr.concurrent_program_id,
fcr.parent_request_id,
fcr.actual_start_date,
fcr.actual_completion_date,
ROUND((fcr.actual_completion_date - fcr.actual_start_date) * 24 * 60,
4) runtime,
DECODE(fcr.phase_code,
'C',
'No Schedule') program_status,
fu.user_name,
frt.responsibility_name,
fcr.logfile_name
FROM
[email protected]_link fcr,
[email protected]_link fcpt,
[email protected]_link fu,
[email protected]_link frt
WHERE
fcr.concurrent_program_id = fcpt.concurrent_program_id
AND fcr.requested_by = fu.user_id
AND fcr.responsibility_id = frt.responsibility_id
AND fcr.responsibility_application_id = frt.application_id
AND fcr.actual_completion_date >= (
SELECT
MAX(allen.main_table.alert_logged_time)
FROM
allen.main_table
WHERE
program_status = 'No Schedule'
)
AND fcr.phase_code = 'C'