Ну, у меня есть серия 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
Насколько я знаю, соответствующие индексы на месте.
Сколько строк находится в @ pop31310 и подобных таблицах?И сколько строк в запросе? – codeulike