gpt4 book ai didi

sql - 我怎样才能提高这个存储过程的性能?

转载 作者:行者123 更新时间:2023-12-02 06:21:31 25 4
gpt4 key购买 nike

好的,所以我对现有的存储过程进行了一些更改,现在运行它需要 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 中获取数据并更新 #tCustomersEmail 表中的 OrderDate,只要 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)

最佳答案

尝试跳过#tsouth 表并使用此查询:

UPDATE a
SET OrderDate = (select max(InvcDate) from D3.SouthW.dbo.uc_InvoiceLine I
where a.customernumber = custid)
FROM #tCustomersEmail a
WHERE orderdate is null

在这个例子中我认为索引不会帮助你

关于sql - 我怎样才能提高这个存储过程的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8512332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com