Я написал этот запрос, который работает, но он просто медленный. У кого-нибудь есть какие-нибудь советы о том, как заставить его работать быстрее?
UCID
- это CTE
. Сама исходная таблица не имеет индексов, и администраторы баз данных не будут добавлять индексы.
select /*+ PARALLEL(6) */ *
from ucid d
inner join ucid o on
--call started no more than 15 seconds after origin call
o.segstart between d.SEGSTART - interval '60' SECOND and d.SEGSTART
-- origin segment stopped exactly when the the destination call stopped
-- OR
-- d segment stopped within 60 seconds of o segment && the o call started
within 5 seconds before the destination segment
and(o.segstop = d.callstop
or (o.callstart between d.SEGSTART - interval '5' SECOND and d.SEGSTART
and d.segstop between o.segstop and o.segstop + interval '60' SECOND
))
-- the number dialed on the o (origin) call is 8 or less digits
and length(o.dialed_num) <= 8
-- the origin call is a dial out
and o.origlogin is not null and o.anslogin is null
--the destination call is answered with an unknown origin
and d.anslogin is not null and d.origlogin is null
-- the origin is a dial out
and o.split1 = -1
-- don't match the same record
and d.CALL_DTL_REC_ID <> o.CALL_DTL_REC_ID