Хорошо, я внес некоторые изменения в хранимую процедуру, которая у нас есть, и теперь она занимает 3 часа (раньше это занимало всего 10 минут). У меня есть временная таблица с именем #tCustomersEmail
. В нем есть столбец с именем OrderDate
, в котором много пустых значений. Я хочу заменить эти нулевые значения данными из другой базы данных на другом сервере. Итак, вот что у меня есть:
Я создаю другую временную таблицу:
Create Table #tSouth
(
CustID char(10),
InvcDate nchar(10)
)
Которые я заполняю этими данными:
INSERT INTO #tSouth(CustID, InvcDate)
SELECT DISTINCT
[CustID],
max(InvcDate) as InvcDate
FROM D3.SouthW.dbo.uc_InvoiceLine I
where EXISTS (SELECT CustomerNumber FROM #tCustomersEmail H WHERE I.CustID = H.CustomerNumber)
group BY I.CustID
Затем я беру данные из #tSouth
и обновляю OrderDate
в таблице #tCustomersEmail
, пока совпадает CustomerNumber
, а OrderDate
равно нулю:
UPDATE #tCustomersEmail
SET OrderDate = InvcDate
FROM #tCustomersEmail
INNER JOIN #tSouth ON #tCustomersEmail.CustomerNumber = [#tSouth].CustID
where #tCustomersEmail.OrderDate IS null
При внесении этих изменений хранимая процедура приняла FOR-EV-ER (ссылка на Sandlot!)
Так что я делаю не так?
Кстати, я создаю индексы для своих временных таблиц после того, как создаю их следующим образом:
create clustered index idx_Customers ON #tCustomersEmail(CustomerNumber)
CREATE clustered index idx_CustSouthW ON #tSouth(CustID)