gpt4 book ai didi

sql - 提高性能SP

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

我有下面的代码......

UPDATE  Sales
SET MappingOrderID = CAST ([dbo].[fRemoveNonNumericCharacters] (ltrim(rtrim(ActualOrderNumber))) AS INT)
FROM Sales
where isnumeric(ActualOrderNumber) = 1
and ActualOrderNumber not like '%.%'
and len(ActualOrderNumber) < 10
and MappingOrderID is null
and ActualOrderNumber is not null
and ltrim(rtrim(ActualOrderNumber)) in (select ltrim(rtrim(OrderID)) from dbo.Orders)

参与的栏目有:

来自销售:MappingOrderId INT实际订单号 NVARCHAR (10)

来自订单:订单号整数

这是遗留代码,我是DBA,我不知道他/她为什么要用那么多Trim...脚本运行需要9分钟,最好经常运行...

我在执行计划中也得到了这个:

  • CONVERT_IMPLICIT(varchar(12),[DataMart].[dbo].[Orders].[OrderID],0​​)

  • CONVERT_IMPLICIT(varchar(20),[Datamart].[dbo].[Sales].[ActualOrderNumber],0)

  • 表达式中的类型转换 (CONVERT_IMPLICIT(varchar(20),[DataMart].[dbo].[Sales].[ActualOrderNumber],0)) 可能会影响查询计划选择中的“CardinalityEstimate”,类型转换表达式 (CONVERT_IMPLICIT(varchar(12),[Datamart].[dbo].[Orders].[OrderID],0​​)) 可能会影响查询计划选择中的“CardinalityEstimate”

据我所知...

它通过转换 ActualOrderNumber (varchar) 来更新 MappingOrderId (int)...只有当 ActualOrderNumber 存在于订单中时才会更新...

我尝试了一些修改;但是 varchar ActualOrderNumber 的值类似于 3545427103,如果我尝试删除类似以下内容:

and len(ActualOrderNumber) < 10

它会破裂......

我的总体目标是使这个过程尽可能高效;在源头修复数据是唯一真正的解决方案吗?

我实现了很多建议,结果只用了一分钟。谢谢!但我不明白的是:

之前,我有丑陋的代码: enter image description here

现在我有更多的阅读……而且它需要几秒钟才能运行……这怎么可能? enter image description here

最佳答案

UPDATE  Sales
SET MappingOrderID = CAST (ltrim(rtrim(ActualOrderNumber)) AS INT)
FROM Sales S
inner join dbo.Orders O on ltrim(rtrim(O.OrderID))=ltrim(rtrim(s.ActualOrderNumber))
where isnumeric(ActualOrderNumber) = 1
and ActualOrderNumber not like '%.%'
and len(ActualOrderNumber) < 10
and MappingOrderID is null

变化

<强>1。删除函数“fRemoveNonNumericCharacters”

  • 因为您在 where 子句中检查 isnumeric,所以不需要使用此函数。

<强>2。加入销售和订单表

  • 如果您将像您提到的那样在 where 子句中使用订单表,那么对于销售表的每一行,将呈现完整的订单表。
  • 为了减少这个过程,我添加了 join。

<强>3。移除 ActualOrderNumeric 不为空

  • 因为您在 where 子句中检查 isnumeric,所以没有必要使用此条件。因为对于 null,isnumeric 将返回 0。

关于sql - 提高性能SP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43847994/

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