T-SQL UDF 与完整表达式运行时

2024-03-01

我试图通过在 SQL SERVER 中使用 UDF 使我的查询可读,但使用该函数时运行时间会急剧增加。

以下是我正在使用的功能:

create function DL.trim_all(@input varchar(max)) 
returns varchar(max)
as begin 
    set @input=replace(replace(replace(@input,' ',''),')',''),'(','')
    return @input
end

而不是写:

SELECT
CASE WHEN replace(replace(replace([FULL_NAME_1],' ',''),')',''),'(','')=replace(replace(replace([FULL_NAME_2],' ',''),')',''),'(','') THEN 1 ELSE 0 END AS [name_match],
CASE WHEN replace(replace(replace([ADDRESS_1],' ',''),')',''),'(','')=replace(replace(replace([ADDRESS_2],' ',''),')',''),'(','') THEN 1 ELSE 0 END AS [adrs_match]
.
.
.
FROM
TABLE_1

20个不同的领域。

使用该函数时,运行时间为 12.5 分钟,而不使用该函数时,运行时间为 45 秒。

有任何想法吗?


将 John 的想法更进一步,将标量函数转换为内联表函数,并使用 cross apply 为每对列激活它 - 您可能会获得更好的性能,但代价是更麻烦的查询:

CREATE function DL.DoesItMatch(@s1 varchar(500),@s2 varchar(500)) 
returns table -- returns a table with a single row and a single column
as return 
  SELECT 
    CASE WHEN replace(replace(replace(@s1,' ',''),')',''),'(','') = 
              replace(replace(replace(@s2,' ',''),')',''),'(','') THEN 1 ELSE 0 END As IsMatch;    

和查询:

SELECT NameMatch.IsMatch AS [name_match],
       AddressMatch.IsMatch AS adrs_match
.
.
.
FROM TABLE_1
CROSS APPLY DL.DoesItMatch(FULL_NAME_1, FULL_NAME_2) As NameMatch
CROSS APPLY DL.DoesItMatch(ADDRESS_1, ADDRESS_2) As AddressMatch
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

T-SQL UDF 与完整表达式运行时 的相关文章

随机推荐

  • AWK 关联数组、映射或哈希映射

    假设我有两个文件 文件1 地图 txt 1 178246 2 289789 3 384275 4 869282 文件2 关系 txt 178246 289789 384275 178246 384275 869282 预期结果是 1 2 3
  • 如何使用组类型查看主题成员

    有一个默认值ClusterRoleBinding named cluster admin 当我跑步时kubectl get clusterrolebindings cluster admin o yaml我得到 apiVersion rba
  • Python中%的意义是什么[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我对编程语言和 Python 都是全新的 尽管我已经阅读了 3 个简短的教程来解释它 但我仍然无法理解 的意义 有人能分解一下 在这段代码
  • EJB中@Resource注解的mappedName和lookup属性有什么区别?

    我对以下两个属性感到困惑 Resource注解 Java 文档说 映射名称 该资源应映射到的产品特定名称 该资源的名称 由 name 元素定义或默认 是使用该资源的应用程序组件的本地名称 它是 JNDI java comp env 命名空间
  • 多轴断裂

    我正在尝试在 Matlab 上创建一个具有多个轴中断的图 如下所示 我尝试过使用类似的东西breakyaxis and breakaxis来自 Matlab 文件交换 但这些只允许一次中断 而不是多次 有没有办法实现这个 The NaN N
  • unordered_map 以引用作为值

    值类型为引用 C 11 的 unordered map 是否合法 例如std unordered map
  • 如何以编程方式读取 AWS Glue 数据目录表架构

    我有一组结构统一的日常 CSV 文件 我将其上传到 S3 有一个下游作业将 CSV 数据加载到 Redshift 数据库表中 CSV 中的列数可能会增加 从那时起 新文件中将包含新列 发生这种情况时 我想检测更改并自动将该列添加到目标 Re
  • 在android中,当一张图像移动时,如何知道两个图像是否相交?

    在我的应用程序中 我使用以下方法在屏幕上移动图像onTouchListener 我在同一视图中还有另外两张图像 我的问题是 当移动图像接触任何其他图像时 我需要执行特定操作 这意味着如果图像相交 则执行某些操作 如何实现这一点 请尽快帮助我
  • 从订单表中提取本周的记录

    我有一张包含以下信息的表格 Id orderNumber orderDate customerId orderDate是 MySQL 日期时间字段 当前日 月 年和时间在写入记录时插入数据库 所以我的问题是如何提取本周某一天的订单列表 我的
  • 克服 NSURL 的 checkResourceIsReachableAndReturnError 的意外行为

    在我为 iOS 5 创建的程序中 我遇到了 NSURL 的 checkResourceIsReachableAndReturnError 方法的意外行为 我创建了一个新项目来验证该问题 并仅包含代码 NSURL url NSURL URLW
  • Pandas:两个 datetime64 对象的差异产生 NaT 而不是正确的 timedelta 值

    这个问题 被问了很多 但仔细查看其他答案后 我还没有找到适合我的情况的解决方案 遗憾的是 这仍然是一个症结所在 我有一个pandas带列的数据框datetime我只是想计算数据覆盖的时间范围 以秒为单位 比如说 from datetime
  • 查询一段时间内的 DAU/MAU(每日)

    我有一个每日会话表 其中包含 user id 和日期列 我想绘制每天的 DAU MAU 每日活跃用户 每月活跃用户 图表 例如 Date MAU DAU DAU MAU 2014 06 01 20 000 5 000 20 2014 06
  • Spring Cloud Stream Kafka - 方法必须是声明性的

    我已经使用 Spring Cloud Stream 配置了一个基于 Spring Boot 的应用程序 我正在尝试处理 KStream 但不断收到错误 java lang IllegalArgumentException 方法必须是声明性的
  • 自训练算法

    我想针对特定问题开发一种自我训练算法 为了简单起见 我将把它归结为简单的例子 更新 我添加了一个工作解决方案作为下面这个问题的答案 假设我有来自数据库的大量实体列表 每个实体都是相同的类型 并且有 4 个字节类型的属性 public cla
  • Maven - 如何重命名 jar 名称的输出分类器?

    我正在尝试重命名属于 WAR 项目一部分的 jar 文件名的默认输出分类器 默认情况下 它会生成以下输出 jar project artifactId project version classifier 在我的示例中 它将生成 myweb
  • 解决“配置对象是只读的,因为它已通过调用 ServerManager.CommitChanges() 提交”?

    我为安装程序项目编写了一个自定义操作 该操作执行以下操作 检查现有网站是否存在同名网站 由用户输入 如果该网站不存在 则在 IIS 中创建该网站 创建应用程序池 将应用程序池分配给创建的网站 当涉及到分配应用程序池时 我收到错误 配置对象是
  • 使用 XML 设置选项卡小部件的样式

    所以我在使用 xml 设计选项卡小部件时遇到了很大的困难 我搜索过的所有地方似乎都建议以编程方式执行此操作的解决方案 或者引用 actionBarTab 样式 gt 我想要实现的是使用生成的 qtabwidget 可绘制对象的自定义选项卡h
  • 我可以在 Google Apps 脚本上设置每小时特定时间的触发器吗?

    我有一个链接到谷歌表格文档的谷歌应用程序脚本 我想在每小时的顶部运行脚本 即恰好下午 1 00 00 下午 2 00 00 下午 3 00 00 等 我已经在 管理项目的触发器 设置中设置了每小时触发器 但是 这将在一小时内选择一个随机时间
  • 将外部模块 TypeScript 声明暴露给使用模块

    我有一个已发布的 TypeScript 模块 我们称之为shared stuff 旨在由其他 TypeScript 模块导入 这shared stuff模块具有第三方依赖项 但没有 types 范围声明 因此该模块内部有几个声明文件 lib
  • T-SQL UDF 与完整表达式运行时

    我试图通过在 SQL SERVER 中使用 UDF 使我的查询可读 但使用该函数时运行时间会急剧增加 以下是我正在使用的功能 create function DL trim all input varchar max returns var