【问题标题】:Performance difference between max and greater than in SQLSQL 中 max 和大于之间的性能差异
【发布时间】:2013-01-14 09:35:42
【问题描述】:

在设计基于日期(例如货币汇率)有影响的表格时,哪个更好?

  1. 生效日期(找出最大值(生效日期)并获取当前值)
  2. 从日期 - 截止日期条件(大于等于 sysdate)

Rgrds.

【问题讨论】:

  • 您使用的是什么 DBMS?请重新标记您的问题
  • 如果您提供表的结构和查询1和2,会更容易为您提供帮助。
  • 1:seq_id、currency_code、currency_name、currency_rate、base_currency_code、effective_date。 2:seq_id、currency_code、currency_name、currency_rate、base_currency_code、from_date、to_date(可以为null)

标签: sql oracle date oracle10g aggregate


【解决方案1】:

这取决于。您有一个表示特定实体更改的表,并且您想要记录实体何时更改,以及更改何时被后续更改替换。

1. 如果您只记录每个事件的生效日期,则 INSERT 会更简单:它们不需要找到较早的记录来更新它。但是,查询变得更加复杂 - 您需要在数据集上运行一个窗口来查找哪条记录在任何时候都适用,这可能会导致性能下降。

另一个缺点是这种模式是开放式的;您不能将货币记录为“永久关闭”(如果您有结束日期,您可以这样做)。

2. 如果您记录每个事件的开始日期和结束日期,查询会更简单:您只需单独查看每一行,就可以知道它是否是“当前”的时间与否。但是,INSERT 稍微复杂一些 - 当您插入新事件时,您必须更新较早的事件以标记其结束日期。

这个模型是封闭式的;您可以在最终事件上设置结束日期并且没有“打开”记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 2012-05-26
    相关资源
    最近更新 更多