Следующие хранимые процедуры работают 4 часа. В любом случае я могу оптимизировать его, чтобы сократить время выполнения до 10 минут?Sybase хранимая процедура занимает слишком много времени
Таблица #TbTemp имеет 150 тыс. Строк. И курсор зацикливается 150k раз.
Поскольку я имею дело с таблицами Temp, у меня будет полный контроль над созданием любых индексов -etc.
Так как курсоров следует избегать, любое альтернативное решение?
declare tmpCur cursor
for
select LnNo,instDrftCreatnDt
from #TbTemp
for read only
open tmpCur
while (1 = 1)
begin --{
fetch tmpCur into @LnNo,@Dt
insert into #TmpLnPmt
(RecTyp,InstNo,LnNo,TotCurChrgdFactr,PmtTyp,
CurrChrgdFactr,CurrPmtAmt,PrevCmptdPmtAmt,NetCmptdPmtAmt)
select '01', @InstNo, @LnNo, @TotCurChrgdFactr, pc.PmtTyp,
0, 0, pc.cmptdPmtAmt, 0-pc.cmptdPmtAmt
from Ln l, Pmt pt, PmtCmpnt pc
where l.LnNo = @LnNo
and pt.mbsLoanPID = l.identifier
and pt.instDrftCreatnDt = @Dt
and pc.paymentComponentsPaymentPID = pt.identifier
and pc.PmtTyp not in (select PmtTyp
from #TbTemp
where LnNo = @LnNo)
and not exists (select 1 from #TmpLnPmt
where LnNo = @LnNo
and PmtTyp = pc.PmtTyp)
end --}
close tmpCur
deallocate cursor tmpCur
Просто чтобы прояснить, это не только курсоры, которые следует избегать, но любой перекручивание или строку с помощью итераций строки. RDBMS основана на концепции наборов и оптимизирована для работы с наборами, а не с строками. –