当前位置: 首页 > news >正文

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风格配置 官网&#xff1a;https://prettier.io Eslint&#xff1a;代码纠错&#xff0c;关注于规范 prettier&#xff1a;专注于代码格式化的插件&#xff0c;让代码更加美观 两者各有所长&#xff0c;配合使用优化代码 生效前提&#xff1a; 1&#xff09;禁用…...

“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&#xff1a;什么是接口测试&#xff0c;基础知识什么的讲讲吧&#xff01; A&#xff1a;你好&#xff0c;接口可以分下面几种 1、系统与系统之间的调用&#xff0c;比如银行会提供接口供电子商务网站调用&#xff0c;或者说&#xff0c;支付宝会提供接口给淘宝调用 2、上…...

【Spring之事务底层源码解析,持续更新中~~~】

文章目录 一、EnableTransactionManagement工作原理二、Spring事务基本执行原理三、Spring事务传播机制与分类四、Spring事务强制回滚五、TransactionSynchronization六、Spring事务详细执行流程 一、EnableTransactionManagement工作原理 二、Spring事务基本执行原理 三、Sp…...

吃火锅(Python)

题目描述 吃火锅 以上图片来自微信朋友圈&#xff1a;这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”&#xff0c;那就厉害了&#xff0c;我们的故事就开始了。 本题要求你实现一个程序&#xff0c;自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。…...

深圳市东星制冷机电受邀莅临2024国际生物发酵展,济南与您相约

深圳市东星制冷机电有限公司受邀莅临2024国际生物发酵展&#xff0c;济南3月5-7日与您相约&#xff01; 展位号&#xff1a;1号馆A53 深圳市东星制冷机电有限公司&#xff0c;&#xff08;东星集团&#xff09;是一家专业生产制冷设备的外商独资大型集团企业,拥有30多年的生产…...

内网渗透(哈希传递)

概念 早期SMB协议明文在网络上传输数据&#xff0c;后来诞生了LM验证机制&#xff0c;LM机制由于过于简单&#xff0c;微软提出了WindowsNT挑战/响应机制&#xff0c;这就是NTLM。 哈希传递前提 同密码(攻击主机与实现主机两台要密码一致)。 NTLM协议 加密ntlm哈希 转换成…...

如何在langchain中对大模型的输出进行格式化

简介 我们知道在大语言模型中, 不管模型的能力有多强大&#xff0c;他的输入和输出基本上都是文本格式的&#xff0c;文本格式的输入输出虽然对人来说非常的友好&#xff0c;但是如果我们想要进行一些结构化处理的话还是会有一点点的不方便。 不用担心&#xff0c;langchain已…...

【送书活动二期】Java和MySQL数据库中关于小数的保存问题

之前总结过一篇文章mysql数据库&#xff1a;decimal类型与decimal长度用法详解&#xff0c;主要是个人学习期间遇到的mysql中关于decimal字段的详解&#xff0c;最近在群里遇到一个小伙伴提出的问题&#xff0c;也有部分涉及&#xff0c;今天就再大致总结一下Java和MySQL数据库…...

11月21日,每日信息差

今天是2023年11月21日&#xff0c;以下是为您准备的16条信息差 第一、国内首条PPP模式市域铁路台州S1线客运量破900万人次。PPP&#xff08;Public-Private Partnership&#xff09;是公共基础设施的一种项目运作模式&#xff0c;指社会资本与政府合作&#xff0c;参与公共基础…...

极速整理文件!Python自动化办公新利器

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 当涉及到自动化办公和文件整理&#xff0c;Python确实是一个强大的工具。在这篇博客文章中&#xff0c;我将深入探讨《极速整理文件&#xff01;Python自动化办公新利器》这个话题&#xff0c;并提供更加丰富和全…...

电机控制学习

电机开发板...

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 进行搜索会直接定位到需要的知识点和命令讲解&#xff08;如有不正确的地方欢迎各位小伙伴在评论区提意见&#xff0c;小编会及时修改&#xff09; Nginx热部署 首先来讲一下为什么要进行热部署 nginx 支持热加载 热部署 &#xff0c;在不打断用户请求的情…...

京东数据运营-京东数据平台-京东店铺数据分析-2023年10月京东烘干机品牌销售榜

鲸参谋监测的京东平台10月份烘干机市场销售数据已出炉&#xff01; 10月份&#xff0c;烘干机市场整体销售上涨。鲸参谋数据显示&#xff0c;今年10月份&#xff0c;京东平台上烘干机的销量将近5万件&#xff0c;环比增长约77%&#xff0c;同比增长约22%&#xff1b;销售额将近…...

java中的方法引用和Stream流

知识模块&#xff1a; 一.方法引用a.方法概述b.方法引用格式 二.Stream流1.Stream流概述2.Stream流操作步骤一.方法引用a.方法概述/*方法引用概述&#xff1a;当我们使用已有类中的方法作为Lambda表达式对应的接口中的抽象方法实现我们可以用方法引用来简化Lambda表达式*/impor…...

《第一行代码:Android》第三版-3.4.4体验Activity的生命周期

本文的代码是在主Activity中&#xff0c;重载了几个生命周期函数&#xff0c;在日志中打印出对应的日志信息&#xff0c;有两个按钮&#xff0c;负责启动另外的Activity&#xff0c;并回到主Activity 由此查看日志&#xff0c;来体会生命周期。 MainActivity.kt 文件如下 pac…...

用java编写一个网络聊天室

网络聊天室 服务器&#xff1a; 1.启动服务器&#xff0c;在服务器端循环监听客户端的连接 try {ServerSocket serverSocketnew ServerSocket(6622);System.out.println("服务器已启动");while(true){//把客户端实例添加到sockets里Socket socketserverSocket.acc…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

npm安装electron下载太慢,导致报错

npm安装electron下载太慢&#xff0c;导致报错 背景 想学习electron框架做个桌面应用&#xff0c;卡在了安装依赖&#xff08;无语了&#xff09;。。。一开始以为node版本或者npm版本太低问题&#xff0c;调整版本后还是报错。偶尔执行install命令后&#xff0c;可以开始下载…...