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
/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/157223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发上门洗衣洗鞋小程序都需要考虑哪些经营场景

互联网的高速发展让很多行业都转变了传统的服务模式&#xff0c;很多需要到店的服务都提供了上门的服务方式&#xff0c;洗护行业也是如此&#xff0c;越来越多的城市都开始流行上门洗衣洗鞋&#xff0c;要做上门的服务模式的话&#xff0c;就需要有一个小程序为载体&#xff0…

离散数学考前小记

数理逻辑 求前束范式的一般步骤&#xff1a; 利用等值公式消去“ → \rightarrow →”和“ ↔ \leftrightarrow ↔”否定深入改名前移量词 仅含有全称量词的前束范式称为SKOLEM标准形。 SKOLEM标准形的求解算法&#xff1a; 先求谓词演算公式的前束范式使用n元函数干掉存在…

Mysql Shell笔记

Mysql Shell部署 cd /usr/local/ tar -xvf /root/mysql-shell-8.0.35-linux-glibc2.17-x86-64bit.tar.gz chown -R mysql.mysql mysqlsh mysql-shell-8.0.35-linux-glibc2.17-x86-64bitmysqlsh登录退出 mysqlsh -uroot -S /data/3306/mysql.sock MySQL Shell 8.0.35 Copyrigh…

【鸿蒙应用ArkTS开发系列】- 灌水区,鸿蒙ArkTs开发有问题可以在该帖中反馈

大家好, 这是一篇水贴&#xff0c;给大家提供一个交流沟通鸿蒙开发遇到问题的地方。 新增新增这个文章呢&#xff0c;大家在开发使用ArkTS开发鸿蒙应用或者鸿蒙服务的时候&#xff0c;有遇到疑问或者问题&#xff0c;可以在本文章评论区提问&#xff0c;我看到了如果知道怎么…

PCL 计算一条射线与一个球的相交点

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 与直线相同,射线往往也可以用点向式来进行表示: O + t D O+tD O+

知识库文档处理

知识库文档处理 1 知识库设计2 文档加载2.1 PDF文档2.2 MD文档2.3 MP4视频 3 文档分割4 文档词向量化 本项目是一个个人知识库助手项目&#xff0c;旨在帮助用户根据个人知识库内容&#xff0c;回答用户问题。个人知识库应当能够支持各种类型的数据&#xff0c;支持用户便捷地导…

List操作的一些常见问题

文章目录 阿里巴巴开发手册强制规约&#xff1a;1. Arrays.asList转换基本类型数组2. Arrays.asList返回的List不支持增删操作3. 对原始数组的修改会影响到我们获得的那个List4. ArrayList.subList强转ArrayList导致异常5. ArrayList中的subList切片造成OOM6.Copy-On-Write 是什…

人工智能的时代---AI的影响

人工智能&#xff08;AI&#xff09;是当前科技领域的一个热门话题&#xff0c;它正在以前所未有的速度改变着我们的生活方式和工作方式。从智能家居到自动驾驶&#xff0c;从智能医疗到智能金融&#xff0c;人工智能正在渗透到我们生活的方方面面。在这篇文章中&#xff0c;我…

基于Python实现用于实时监控和分析 MySQL 服务器的性能指标和相关信息工具源码

MySQL命令行监控工具 - mysqlstat 介绍 mysqlstat 是一个命令行工具&#xff0c;用于实时监控和分析 MySQL 服务器的性能指标和相关信息。 它可以帮助 DBA&#xff08;数据库管理员&#xff09;和开发人员定位和解决数据库性能问题。 以下是 mysqlstat 工具的主要功能&#…

案例研究|北京交通大学基于DataEase开展多场景校园数据分析与展示

北京交通大学是教育部直属&#xff0c;教育部、交通运输部、北京市人民政府和中国国家铁路集团有限公司共建的全国重点大学&#xff0c;是国家“211工程”“985工程优势学科创新平台”“双一流”建设高校。 多年来&#xff0c;北京交通大学积极发挥信息技术赋能学校人才培养、…

常见的幂等性保障方案

数据幂等性是指相同的操作在不同时间执行多次所产生的结果是一样的&#xff0c;它是保证操作的可靠性和正确性的重要标准。 使用幂等性是必要的&#xff0c;因为同一操作经常会被重复执行。当多次执行相同的操作时&#xff0c;如果没有幂等性&#xff0c;会产生不可预料的结果…

基于Acconeer的A121-60GHz毫米波雷达传感器SDK移植及测距示例(STM32L496为例)

基于Acconeer的A121-60GHz毫米波雷达传感器SDK移植及测距示例&#xff08;STM32L496为例&#xff09; 工程&#xff1a; Keil工程资源 参考资料&#xff1a; A121 datasheet 1.3 A121 HAL Software Integration User Guide A121 STM32CubeIDE User Guide 官方参考示例工程&a…

Android 10-13鼠标右键返回功能适配

Android 10-13鼠标右键返回功能适配 文章目录 Android 10-13鼠标右键返回功能适配一、前言二、鼠标右键适配修改1、Android 10 以及更低版本2、Android11 或者更高版本三、总结1、鼠标右键返回功能修改主要代码2、标右键返回修改代码系统源码搜索3、其他 一、前言 Android 原生…

MySQL安全性:用户认证、防范SQL注入和SSL/TLS配置详解

MySQL作为广泛使用的关系型数据库管理系统&#xff0c;安全性至关重要。在本篇技术博客中&#xff0c;我们将深入探讨MySQL的用户认证方式、防范SQL注入攻击的方法以及SSL/TLS加密的配置。 1. MySQL用户认证方式 MySQL支持多种用户认证方式&#xff0c;其中两种常见方式是cac…

Logstash同步MySQL数据到ES

简介 1.1 什么是Logstash&#xff1f; Logstash作为一个具备实时流水线功能的开源数据收集引擎&#xff0c;拥有强大的能力。它能够从不同来源收集数据&#xff0c;并将其动态地汇聚&#xff0c;进而根据我们定义的规范进行转换或者输出到我们定义的目标地址。 1.2 Logstash的…

水果音乐制作软件FL Studio21.2中文版新功能介绍

FL Studio21.2中文版&#xff0c;一般又称水果音乐制作软件。 FL Studio 21.2简称FL&#xff0c;全称FruityLoopsStudio&#xff0c;因此国人习惯叫它"水果"。它让你的计算机就像是全功能的录音室&#xff0c;大混音盘&#xff0c;非常先进的制作工具&#xff0c;让…

docker 安装kkFileView教程

kkFile 官方参考文档 https://kkfileview.keking.cn/zh-cn/docs/production.html拉取kkFileView 镜像 docker pull keking/kkfileview启动容器 docker run -it -d -p 8012:8012 keking/kkfileview --restart always进入首页 浏览器访问容器8012端口http://ip :8012即可看到…

MySQL数据库事务隔离级别与性能监控

MySQL作为一款广泛使用的关系型数据库管理系统&#xff0c;在保障数据一致性和性能的同时&#xff0c;提供了丰富的事务隔离级别和性能监控工具。本文将深入探讨MySQL的事务隔离级别以及如何查看MySQL的运行状态和性能统计信息。 1. 数据库事务的隔离级别 1.1 什么是事务隔离…

练习7-在Verilog中使用任务task

在Verilog中使用任务task 1&#xff0c;任务目的2&#xff0c;RTL代码&#xff0c;交换3&#xff0c;测试代码4&#xff0c;波形显示 1&#xff0c;任务目的 &#xff08;1&#xff09;掌握任务在verilog模块设计中的应用&#xff1b; &#xff08;2&#xff09;学会在电平敏感…

②【Hash】Redis常用数据类型:Hash [使用手册]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Redis Hash ②Redis Hash 操作命令汇总1. hset…