首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RPGLE中的嵌入式SQL更新性能

RPGLE中的嵌入式SQL更新性能
EN

Stack Overflow用户
提问于 2019-03-11 17:20:36
回答 4查看 724关注 0票数 0

当使用RPGLE程序中的嵌入式SQL更新文件中的日期/时间字段时,我可以使用CURRENT_DATE/CURRENT_TIME或将当前日期/时间值存储到主机变量中。并使用这个主机进行分配。

现在我想知道哪条路更快?还是这不相关?

代码语言:javascript
运行
复制
exec sql
  update testpf
  set t1date = CURRENT_DATE, t1time = CURRENT_TIME
  where t1key = someValue;

代码语言:javascript
运行
复制
dcl-s date date;
dcl-s time time;
exec sql
  set :date = CURRENT_DATE;
exec sql
  set :time = CURRENT_TIME;
exec sql
  update testpf
  set t1date = :date, t1time = :time
  where t1key = someValue;

注:这都是“在飞”!但我希望你明白我的意思

编辑:为了澄清,目标不是只更新一行,它适用于多个更新。比如有一个带有发票位置和状态字段的数据库。这个状态字段有3个相邻字段,这些字段跟踪用户在哪一天更改它。在我的例子中,可能有几百个职位需要更新时间和日期。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-03-12 11:16:00

我认为您的问题没有简单的答案,事实上,如果您搜索有关主机变量的信息,IBM也不会给出一个快速的答案,请看这里:

主机变量需要默认筛选因子。当绑定包含主机变量的静态SQL语句时,Db2使用默认筛选因子来确定该SQL语句的最佳访问路径。Db2通常选择一个具有多个主机变量的查询性能良好的访问路径。但是,在新版本中或在应用了维护之后,Db2可能会选择一个与旧的访问路径不一样的新访问路径。在许多情况下,访问路径的更改是由于默认的筛选因子,这可能导致Db2以不同的方式优化查询。

票数 1
EN

Stack Overflow用户

发布于 2019-03-11 17:45:05

如果要使用CURRENT_DATECURRENT_TIME寄存器,我希望最好在需要它们的SQL语句中使用它们。第二个示例涉及对数据库的三个请求,而第一个示例只涉及一个请求。因此,我怀疑前者的性能会更好,因为所有三个都具有相同的(获取此寄存器)开销,而第二个具有三次调用开销,而第二次则有一次调用开销。

另外,第一个更容易阅读(最重要的考虑因素,IMO,除非不是)。也就是说,如果您真的不需要优化,就没有必要进行优化。当然,如果我想在RPG中检索当前的日期和时间,我不会使用SQL进行检索,而是使用内置的RPG,比如%date()%time();)

编辑:这里有一些非性能的注意事项。如果希望在所有行和所有更新中使用相同的日期/时间,则必须提前捕获日期和时间。如果需要更新的实际日期和时间,则需要使用寄存器。但是,SQL所做的一件好事是,如果在单个SQL语句中使用CURRENT_DATECURRENT_TIMECURRENT_TIMESTAMP,或者将这几次混合在一起,那么对于给定的语句执行,更新的所有行都具有相同的日期、时间和时间戳。

票数 1
EN

Stack Overflow用户

发布于 2019-03-11 23:55:02

我的两分钱。您知道IBM上的行更改时间戳列吗?它们在73/sqlp/rbafysqlprcts.htm中被描述

它们可以通过每次插入或更新一行时保留一个自动维护的时间戳列来节省大量编码。另一方面,只支持时间戳列,而不支持分隔的日期和时间列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55107195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档