Using Set Processing Examples 使用集合处理示例
Using Set Processing Examples 使用集合处理示例
Each of the following topics contains an example of set processing.
以下每个主题都包含一个集处理示例。
Payroll 工资单
In this example, suppose the payroll department needs to give a 1000 USD salary increase to everyone whose department made more than 50,000 USD profit. The following pseudocode enables you to compare the row-by-row and set-based approaches.
在这个例子中,假设工资部门需要给部门利润超过50,000美元的每个人增加1000美元的工资。下面的伪代码使您能够比较逐行和基于集合的方法。
• Row-by-Row:
• 一行一行
declare A cursor for select dept_id from department where profit > 50000;
open A;
fetch A into p_dept_id
while sql_status == OK
update personnel set salary = (salary+1000) where dept_id = p_dept_id;
fetch A into p_dept_id;
end while; close A; free A;
• Set-Based:
• 基于集合的
update personnel set salary = (salary + 1000)
where exists
(select ‘X’ from department where profit > 50000 and personnel.dept_id = department.dept_id)
Note: The set-based example employs a correlated subquery, which is important in set-based processing.
注意:基于集合的示例使用了一个相关的子查询,这在基于集合的处理中很重要。
Temporary Tables
One technique for improving database performance is to use temporary tables to hold the results of common subqueries. Effective dating and setID indirection are common types of subqueries that you can replace with joins to temporary tables. With the joins in place, you can access the temporary table instead of doing the subquery multiple times. Not only do most databases prefer joins to subqueries, but if you combine multiple subqueries into a single join as well, the performance benefits can be significant.
提高数据库性能的一种技术是使用临时表来保存公共子查询的结果。有效日期和setID间接寻址是常见的子查询类型,您可以使用到临时表的联接来替换它们。连接到位后,您可以访问临时表,而不是多次执行子查询。不仅大多数数据库更喜欢连接而不是子查询,而且如果将多个子查询合并到一个连接中,性能方面的好处也会非常显著。
In this setID indirection example, you see a join from a transaction table (keyed by BUSINESS_UNIT and ACCOUNTING_DT) to a setup table (keyed by SETID and EFFDT).
在这个setID间接寻址示例中,您将看到从事务表(以BUSINESS_UNIT和ACCOUNTING_DT为键)到设置表(以SETID和EFFDT为键)的连接。
If using a single SQL statement, you need to bring in PS_SET_CNTRL_REC to map the business unit to a corresponding setID. Typically, you do this in a subquery. You also need to bring in the setup table a second time in a subquery to get the effective date (MAX(EFFDT) <= ACCOUNTING_DT). If you have a series of similar statements, performance may be negatively affected.
如果使用单个SQL语句,则需要引入PS_SET_CNTRL_REC来将业务单元映射到相应的setID。通常,在子查询中执行此操作。您还需要在子查询中第二次引入安装表以获得生效日期(MAX(EFFDT)<=Accountingdt)。如果你有一系列类似的语句,性能可能会受到负面影响。
The alternative is to use a temporary table that is the equivalent of the setup table. The temporary table is keyed by BUSINESS_UNIT and ACCOUNTING_DT instead of SETID and EFFDT. You populate it initially by joining in your batch of transactions (presumably also a temporary table) once, as described previously, to get all the business units and accounting dates for this batch. From then on, your transaction and setup temporary tables have common keys, which allow a straight join with no subqueries.
另一种方法是使用一个临时表,它相当于设置表。临时表由Business_Unit和Account_DT键组成,而不是SETID和EFFDT。如前所述,首先通过加入您的事务批(假定也是一个临时表)一次来填充它,以获得此批的所有业务单元和会计日期。从那时起,您的事务和设置临时表就有了公共键,这允许不使用子查询的直接联接。
For the example, the original setup table (PS_ITEM_ENTRY_TBL) is keyed by SETID, ENTRY_TYPE and EFFDT.
例如,原始设置表(PS_ITEM_ENTRY_TBL)由SETID、ENTRY_TYPE和EFFDT作为键。
The denormalized temporary table version (PS_ITEM_ENTRY_TAO) is keyed by
PROCESS_INSTANCE, BUSINESS_UNIT, ENTRY_TYPE and ACCOUNTING_DT, and carries the
original keys (SETID and EFFDT) as simple attributes for joining to other related setup tables, as in PS_ITEM_LINES_TBL for this example.
非规范化的临时表版本(PS_ITEM_ENTRY_TAO)由PROCESS_INSTANCE、BUSINESS_UNIT、ENTRY_TYPE和ACCOUNTING_DT,并携带原始键(SETID和EFFDT)作为连接到其他相关设置表的简单属性,如本例中的PS_ITEM_LINES_TBL。
If the program references the setup table in only one Insert/Select or Select statement, you would not see increased performance by denormalizing the temporary table. But if several SQL statements are typically executed in a single run, all of which join in the same setup table with similar setID and effective date considerations, then the performance cost of populating the temporary table initially provides long-term advantages.
如果程序只在一个Insert/Select或Select语句中引用设置表,那么将不会看到通过反规范化临时表来提高性能。但是,如果几条SQL语句通常在一次运行中执行,所有这些语句都加入到具有类似setID和有效日期考虑的同一个设置表中,那么填充临时表的性能成本最初提供了长期优势。
• Original setup table version:
原始设置表版本:
INSERT INTO PS_PG_PENDDST_TAO (...)
SELECT . . . . . ( (I.ENTRY_AMT_BASE - I.VAT_AMT_BASE) * L.DST_LINE_MULTIPLR * L.DST_LINE_PERC⇒ ENT / 100 ), ( (I.ENTRY_AMT - I.VAT_AMT) * L.DST_LINE_MULTIPLR * L.DST_LINE_⇒
PERCENT / 100 ), . . . . .
FROM PS_PENDING_ITEM I, PS_PG_REQUEST_TAO R, PS_ITEM_LINES_TBL L,
PS_ITEM_ENTRY_TBL E, PS_SET_CNTRL_REC S, PS_BUS_UNIT_TBL_AR B
. . . . .WHERE AND L.ENTRY_REASON = I.ENTRY_REASON AND L.SETID = E.SETID AND ⇒
L.ENTRY_TYPE = E.ENTRY_TYPE AND L.EFFDT = E.EFFDT. . . . . AND E.EFF_STATUS = 'A'
AND S.RECNAME = 'ITEM_ENTRY_TBL'
AND S.SETID = E.SETID
AND S.SETCNTRLVALUE = I.BUSINESS_UNIT
AND E.ENTRY_TYPE = I.ENTRY_TYPE
AND E.EFFDT = (SELECT MAX(EFFDT) FROM PS_ITEM_ENTRY_TBL Z
WHERE Z.SETID = E.SETID
AND Z.ENTRY_TYPE = E.ENTRY_TYPE
AND Z.EFF_STATUS = 'A'
AND Z.EFFDT <= I.ACCOUNTING_DT )
AND B.BUSINESS_UNIT = I.BUSINESS_UNIT
/
• Denormalized temporary table version:
非正规化的临时表版本:
INSERT INTO PS_ITEM_ENTRY_TAO . . . . .
SELECT DISTINCT %BIND(PROCESS_INSTANCE), I.BUSINESS_UNIT, I.ACCOUNTING_DT, E.ENTRY_TYPE... . . .
FROM PS_PENDING_ITEM I, PS_PG_REQUEST_TAO R,
PS_ITEM_ENTRY_TBL E, PS_SET_CNTRL_REC S, PS_BUS_UNIT_TBL_AR B
WHERE R.PROCESS_INSTANCE = %BIND(PROCESS_INSTANCE)
AND R.PGG_GROUP_TYPE = 'B'
AND I.POSTED_FLAG = 'N'
AND R.GROUP_BU = I.GROUP_BU
AND R.GROUP_ID = I.GROUP_ID
AND E.EFF_STATUS = 'A'
AND S.RECNAME = 'ITEM_ENTRY_TBL'
AND S.SETID = E.SETID
AND S.SETCNTRLVALUE = I.BUSINESS_UNIT
AND E.ENTRY_TYPE = I.ENTRY_TYPE
AND E.EFFDT = ( SELECT MAX(EFFDT) FROM PS_ITEM_ENTRY_TBL Z
WHERE Z.SETID = E.SETID
AND Z.ENTRY_TYPE = E.ENTRY_TYPE
AND Z.EFF_STATUS = 'A'
AND Z.EFFDT <= I.ACCOUNTING_DT )
AND B.BUSINESS_UNIT = I.BUSINESS_UNIT
/
INSERT INTO PS_PG_PENDDST_TAO (...) SELECT ...
( (I.ENTRY_AMT_BASE - I.VAT_AMT_BASE) * L.DST_LINE_MULTIPLR * L.DST_LINE_PERC⇒
ENT / 100 ),
( (I.ENTRY_AMT - I.VAT_AMT) * L.DST_LINE_MULTIPLR * L.DST_LINE_PERCENT / 100 )⇒ ,
. . . . .
FROM PS_PENDING_ITEM I, PS_PG_REQUEST_TAO R, PS_ITEM_LINES_TBL L,
PS_ITEM_ENTRY_TAO E . . . . .
WHERE . . . . .
AND L.ENTRY_REASON = I.ENTRY_REASON
AND L.SETID = E.SETID
AND L.ENTRY_TYPE = E.ENTRY_TYPE
AND L.EFFDT = E.EFFDT . . . . .
AND E.BUSINESS_UNIT = I.BUSINESS_UNIT
AND E.ACCOUNTING_DT = I.ACCOUNTING_DT
AND E.ENTRY_TYPE = I.ENTRY_TYPE
/
相关文章:
Using Set Processing Examples 使用集合处理示例
Using Set Processing Examples 使用集合处理示例 Each of the following topics contains an example of set processing. 以下每个主题都包含一个集处理示例。 Payroll 工资单 In this example, suppose the payroll department needs to give a 1000 USD salary increase to…...
Spark将execl表格文件导入到mysql中
实现代码 excel所需的pom依赖 案例实现 实现代码 package excel_mysqlimport org.apache.spark.sql.SparkSession import java.util.Propertiesobject t1 {def main(args: Array[String]): Unit {val spark SparkSession.builder().appName("ExcelToMySQL") /…...
Vue3-Eslint配置代码风格
prettier风格配置 官网:https://prettier.io Eslint:代码纠错,关注于规范 prettier:专注于代码格式化的插件,让代码更加美观 两者各有所长,配合使用优化代码 生效前提: 1)禁用…...
“Install Js dependencies failed“JS SDK安装失败【Bug已解决-鸿蒙开发】
文章目录 项目场景:问题描述原因分析:解决方案:解决措施1解决方案2:其他解决方案解决方案3:此Bug解决方案总结项目场景: 在下载JS SDK时,出现下载失败的情况,并显示“Install Js dependencies failed”。 在使用版本为DevEco Studio 3.0.0.601 Beta1进行低代码开发时…...
接口测试入门8问(含答案+文档)
Q1:什么是接口测试,基础知识什么的讲讲吧! A:你好,接口可以分下面几种 1、系统与系统之间的调用,比如银行会提供接口供电子商务网站调用,或者说,支付宝会提供接口给淘宝调用 2、上…...
【Spring之事务底层源码解析,持续更新中~~~】
文章目录 一、EnableTransactionManagement工作原理二、Spring事务基本执行原理三、Spring事务传播机制与分类四、Spring事务强制回滚五、TransactionSynchronization六、Spring事务详细执行流程 一、EnableTransactionManagement工作原理 二、Spring事务基本执行原理 三、Sp…...
吃火锅(Python)
题目描述 吃火锅 以上图片来自微信朋友圈:这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”,那就厉害了,我们的故事就开始了。 本题要求你实现一个程序,自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。…...
深圳市东星制冷机电受邀莅临2024国际生物发酵展,济南与您相约
深圳市东星制冷机电有限公司受邀莅临2024国际生物发酵展,济南3月5-7日与您相约! 展位号:1号馆A53 深圳市东星制冷机电有限公司,(东星集团)是一家专业生产制冷设备的外商独资大型集团企业,拥有30多年的生产…...
内网渗透(哈希传递)
概念 早期SMB协议明文在网络上传输数据,后来诞生了LM验证机制,LM机制由于过于简单,微软提出了WindowsNT挑战/响应机制,这就是NTLM。 哈希传递前提 同密码(攻击主机与实现主机两台要密码一致)。 NTLM协议 加密ntlm哈希 转换成…...
如何在langchain中对大模型的输出进行格式化
简介 我们知道在大语言模型中, 不管模型的能力有多强大,他的输入和输出基本上都是文本格式的,文本格式的输入输出虽然对人来说非常的友好,但是如果我们想要进行一些结构化处理的话还是会有一点点的不方便。 不用担心,langchain已…...
【送书活动二期】Java和MySQL数据库中关于小数的保存问题
之前总结过一篇文章mysql数据库:decimal类型与decimal长度用法详解,主要是个人学习期间遇到的mysql中关于decimal字段的详解,最近在群里遇到一个小伙伴提出的问题,也有部分涉及,今天就再大致总结一下Java和MySQL数据库…...
11月21日,每日信息差
今天是2023年11月21日,以下是为您准备的16条信息差 第一、国内首条PPP模式市域铁路台州S1线客运量破900万人次。PPP(Public-Private Partnership)是公共基础设施的一种项目运作模式,指社会资本与政府合作,参与公共基础…...
极速整理文件!Python自动化办公新利器
更多资料获取 📚 个人网站:ipengtao.com 当涉及到自动化办公和文件整理,Python确实是一个强大的工具。在这篇博客文章中,我将深入探讨《极速整理文件!Python自动化办公新利器》这个话题,并提供更加丰富和全…...
电机控制学习
电机开发板...
leetcode 1670
leetcode 1670 解题思路 使用2个deque作为类的成员变量 code class FrontMiddleBackQueue { public:deque<int> left;deque<int> right;FrontMiddleBackQueue() {}void pushFront(int val) {left.push_front(val);if(left.size() right.size()2){right.push_fr…...
Nginx热部署
快捷查看指令 ctrlf 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,小编会及时修改) Nginx热部署 首先来讲一下为什么要进行热部署 nginx 支持热加载 热部署 ,在不打断用户请求的情…...
京东数据运营-京东数据平台-京东店铺数据分析-2023年10月京东烘干机品牌销售榜
鲸参谋监测的京东平台10月份烘干机市场销售数据已出炉! 10月份,烘干机市场整体销售上涨。鲸参谋数据显示,今年10月份,京东平台上烘干机的销量将近5万件,环比增长约77%,同比增长约22%;销售额将近…...
java中的方法引用和Stream流
知识模块: 一.方法引用a.方法概述b.方法引用格式 二.Stream流1.Stream流概述2.Stream流操作步骤一.方法引用a.方法概述/*方法引用概述:当我们使用已有类中的方法作为Lambda表达式对应的接口中的抽象方法实现我们可以用方法引用来简化Lambda表达式*/impor…...
《第一行代码:Android》第三版-3.4.4体验Activity的生命周期
本文的代码是在主Activity中,重载了几个生命周期函数,在日志中打印出对应的日志信息,有两个按钮,负责启动另外的Activity,并回到主Activity 由此查看日志,来体会生命周期。 MainActivity.kt 文件如下 pac…...
用java编写一个网络聊天室
网络聊天室 服务器: 1.启动服务器,在服务器端循环监听客户端的连接 try {ServerSocket serverSocketnew ServerSocket(6622);System.out.println("服务器已启动");while(true){//把客户端实例添加到sockets里Socket socketserverSocket.acc…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
