RPGLE中嵌入式SQL在Update中的性能

时间:2019-03-11 17:20:37

标签: db2 rpgle embedded-sql

在RPGLE程序中使用嵌入式SQL更新文件中的日期/时间字段时,我可以使用const myComponent = ({ dataA, deleteOp }) => { return <button onClick={() => deleteOp(dataA.title)}>delete</button> } const mapStateToProps = state => ({ dataA: state.reducerA }); // this works fine // data seems to be distributed properly export default connect(mapStateToProps, { deleteOp })(myComponent); / CURRENT_DATE或将当前日期/时间值存储到主机变量中。并使用此主机进行分配。

现在我想知道哪种方法更快?还是无关紧要的?

CURRENT_TIME

exec sql
  update testpf
  set t1date = CURRENT_DATE, t1time = CURRENT_TIME
  where t1key = someValue;

注意:这都是“即时”写的!但我希望你明白我的意思

编辑:为澄清起见,目标不是仅更新一行,而是要进行多次更新。就像拥有带有发票位置和状态字段的数据库一样。该状态字段具有3个neigbour字段,这些字段跟踪用户在哪一天的哪个时间对其进行更改。就我而言,可能有数百个位置需要更新时间和日期。

3 个答案:

答案 0 :(得分:1)

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

另外,第一个只是更易于阅读(最重要的考虑因素,IMO,除非不是)。也就是说,如果您不需要的话,则无需进行优化。当然,如果我想在RPG中检索当前日期和时间,我不会使用SQL来执行,而是使用%date()%time();-)< / p>

编辑: 这里有一些非性能方面的考虑。如果要在所有更新的所有行上使用相同的日期/时间,则必须提前捕获日期和时间。如果您需要更新的实际日期和时间,则需要使用寄存器。 SQL要做的一件好事是,如果您在单个SQL语句中多次使用CURRENT_DATECURRENT_TIMECURRENT_TIMESTAMP或这些的某种混合,则所有更新的行将具有相同的给定执行语句的日期,时间和时间戳。

答案 1 :(得分:1)

我的两分钱。您是否知道IBM i上的行更改时间戳记列?它们在https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_73/sqlp/rbafysqlprcts.htm中有描述吗?

通过在每次插入或更新行时保留一个自动维护的timestamp列,它们可以为您节省很多代码。另一方面,仅时间戳列支持,而日期和时间分开的列不支持。

答案 2 :(得分:1)

我个人会使用第一个选项。代码更简单,我无法想象会有明显的性能差异。

我唯一选择使用第二个选项的是日期有时可能不是系统日期(例如UDATE)。