Что ж, у меня есть ряд sps, которые используют решение для хранилища данных, которое мы разработали на месте. Хотя по большей части он работает довольно хорошо, есть одна хранимая процедура, которая работает очень медленно. Выполнение занимает в среднем около 30 минут. Я точно знаю, где находится горлышко бутылки, я просто не знаю, как это исправить.
По сути, хранимая процедура создает последовательность переменных временных таблиц и вставляет их в эти таблицы. нет проблем там. затем он дважды объединяет временные таблицы и вставляет их в другую временную таблицу (вторая немного отличается).
это оператор, который соединяет таблицы и вставляет их во временную таблицу, и это та часть, которая занимает вечность. любая помощь будет принята с благодарностью.
; with Requested as
(
select distinct
PONUMBER as PONumber,
min(REQSTDBY) as RequestedBy
from dw.POP10110
where REQSTDBY <>''
group by PONUMBER
)
insert into @tblTableA
(
PONumber,
ReceiptNumber,
ReceiptLineNumber,
VendorID,
POType,
QuantityShipped,
QuantityInvoiced,
ItemNumber,
ItemDescription,
UofM,
UnitCost,
ExtendedCost,
SiteID,
ProjectNumber,
AccountID,
RequestedBy,
GLPostDate,
VendorName,
CostCategoryID
)
select
a.PONUMBER,
a.POPRCTNM,
a.RCPTLNNM,
a.VENDORID,
a.POPTYPE,
a.QTYSHPPD,
a.QTYINVCD,
b.ITEMNMBR,
b.ITEMDESC,
b.UOFM,
b.UNITCOST,
b.EXTDCOST,
b.LOCNCODE,
b.ProjNum,
case i.CostCategoryID
when 'MISC' then isnull(i.AccountID,'N/A')
else
case j.CostCategoryID
when 'MISC' then
isnull(j.AccountID,'N/A')
else
isnull(c.PurchaseAccount,'N/A')
end
end as AccountID,
d.RequestedBy,
coalesce(e.GLPOSTDT, f.GLPOSTDT, '') as GLPostDate,
coalesce(e.VENDNAME, f.VENDNAME, '') as VENDNAME,
case i.CostCategoryID when 'MISC' then i.CostCategoryID else
case j.CostCategoryID when 'MISC' then j.CostCategoryID else coalesce(g.CostCategoryID, h.CostCategoryID, '') end
end as CostCategoryID
from dw.POP10500 a
inner join dw.POP30310 b
on a.PONUMBER=b.PONUMBER
and a.POPRCTNM=b.POPRCTNM
and a.RCPTLNNM=b.RCPTLNNM
left outer join @gl00100 c
on b.INVINDX=c.ActID
left outer join Requested d
on b.PONUMBER = d.PONumber
left outer join dw.POP30300 e
on b.POPRCTNM=e.POPRCTNM
left outer join dw.POP10300 f
on b.POPRCTNM=f.POPRCTNM
left outer join @pop31310 g
on b.POPRCTNM=g.ReceiptNumber
left outer join @pop11310 h
on b.POPRCTNM=h.ReceiptNumber
left outer join @pop30390 i
on a.POPRCTNM=i.ReceiptNumber
left outer join @pop10390 j
on a.POPRCTNM=j.ReceiptNumber
Насколько мне известно, соответствующие индексы на месте.