SELECT
B.CE_ID,
A.PPL_CNTR_ID,
SUM ( A.NBR_IN ) ENTERS,
SUM ( A.NBR_OUT ) EXITS,
A.LOG_TS
+ DECODE ( TO_CHAR ( A.LOG_TS,
'mi' ),
'05', 55
/ 1440,
'10', 50
/ 1440,
'15', 45
/ 1440,
'20', 40
/ 1440,
'25', 35
/ 1440,
'30', 30
/ 1440,
'35', 25
/ 1440,
'40', 20
/ 1440,
'45', 15
/ 1440,
'50', 10
/ 1440,
'55', 5
/ 1440,
0 )
TS
FROM
OUTPUTDB.TPPL_CNTR_TRAFFIC A,
FLUX.V_CE_PPLCNTR B
WHERE
A.LOG_TS BETWEEN '07-Sep-13' AND '08-Sep-13'
AND A.PPL_CNTR_ID = B.PPL_CNTR_ID
AND B.CE_ID IN (SELECT
DISTINCT CE_DPN_ID
FROM
TCE_RLT
START WITH
CE_PRN_ID = 5798
CONNECT BY
PRIOR CE_DPN_ID = CE_PRN_ID)
GROUP BY
B.CE_ID,
A.PPL_CNTR_ID,
A.LOG_TS
+ DECODE ( TO_CHAR ( A.LOG_TS,
'mi' ),
'05', 55
/ 1440,
'10', 50
/ 1440,
'15', 45
/ 1440,
'20', 40
/ 1440,
'25', 35
/ 1440,
'30', 30
/ 1440,
'35', 25
/ 1440,
'40', 20
/ 1440,
'45', 15
/ 1440,
'50', 10
/ 1440,
'55', 5
/ 1440,
0 )
ORDER BY
B.CE_ID,
A.PPL_CNTR_ID,
A.LOG_TS
+ DECODE ( TO_CHAR ( A.LOG_TS,
'mi' ),
'05', 55
/ 1440,
'10', 50
/ 1440,
'15', 45
/ 1440,
'20', 40
/ 1440,
'25', 35
/ 1440,
'30', 30
/ 1440,
'35', 25
/ 1440,
'40', 20
/ 1440,
'45', 15
/ 1440,
'50', 10
/ 1440,
'55', 5
/ 1440,
0 )
The inner subquery
SELECT
DISTINCT CE_DPN_ID
FROM
TCE_RLT
START WITH
CE_PRN_ID = 5798
CONNECT BY
PRIOR CE_DPN_ID = CE_PRN_ID
returns 970 rows , But it's taking very long time to execute , Please suggest any alternate clause or joining so that It runs faster . The 2 tables used have only one column in common , So I am pretty sure no cross joining is taking place .
The following recommendations will help you in your SQL tuning process.
You'll find 3 sections below:
ALTER TABLE `TCE_RLT` ADD INDEX `tce_rlt_idx_ce_id` (`CE_DPN_ID`);
ALTER TABLE `TPPL_CNTR_TRAFFIC` ADD INDEX `tppl_traffic_idx_ppl_id_log_ts` (`PPL_CNTR_ID`,`LOG_TS`);
ALTER TABLE `V_CE_PPLCNTR` ADD INDEX `v_pplcntr_idx_ppl_id` (`PPL_CNTR_ID`);
SELECT
B.CE_ID,
A.PPL_CNTR_ID,
SUM(A.NBR_IN) ENTERS,
SUM(A.NBR_OUT) EXITS,
A.LOG_TS + DECODE(TO_CHAR(A.LOG_TS,
'mi'),
'05',
55 / 1440,
'10',
50 / 1440,
'15',
45 / 1440,
'20',
40 / 1440,
'25',
35 / 1440,
'30',
30 / 1440,
'35',
25 / 1440,
'40',
20 / 1440,
'45',
15 / 1440,
'50',
10 / 1440,
'55',
5 / 1440,
0) TS
FROM
OUTPUTDB.TPPL_CNTR_TRAFFIC A,
FLUX.V_CE_PPLCNTR B
WHERE
A.LOG_TS BETWEEN '07-Sep-13' AND '08-Sep-13'
AND A.PPL_CNTR_ID = B.PPL_CNTR_ID
AND EXISTS (
SELECT
DISTINCT 1
FROM
TCE_RLT
WHERE
(
B.CE_ID = TCE_RLT.CE_DPN_ID
)
)
GROUP BY
B.CE_ID,
A.PPL_CNTR_ID,
A.LOG_TS + DECODE(TO_CHAR(A.LOG_TS,
'mi'),
'05',
55 / 1440,
'10',
50 / 1440,
'15',
45 / 1440,
'20',
40 / 1440,
'25',
35 / 1440,
'30',
30 / 1440,
'35',
25 / 1440,
'40',
20 / 1440,
'45',
15 / 1440,
'50',
10 / 1440,
'55',
5 / 1440,
0)
ORDER BY
B.CE_ID,
A.PPL_CNTR_ID,
A.LOG_TS + DECODE(TO_CHAR(A.LOG_TS,
'mi'),
'05',
55 / 1440,
'10',
50 / 1440,
'15',
45 / 1440,
'20',
40 / 1440,
'25',
35 / 1440,
'30',
30 / 1440,
'35',
25 / 1440,
'40',
20 / 1440,
'45',
15 / 1440,
'50',
10 / 1440,
'55',
5 / 1440,
0)