代码之家  ›  专栏  ›  技术社区  ›  Goran Martinic

在具有重载数据库的查询中使用子选择应该考虑什么?

  •  1
  • Goran Martinic  · 技术社区  · 16 年前

    我们正在开发一个使用OpenJPA1.1和Oracle DB作为后端存储的具有持久层的应用程序。我将使用带有子选择的查询(请参阅我的问题 Solving JPA query finding the last entry in connected list ).

    现在,我的同事在工作中评论说,这样的查询可能会导致性能问题,因为数据库中充满了数千个并发用户使用的数千个客户数据(这将在生产中成为现实)。

    所以,我的问题是:是否有 “最佳实践” 使用 subselects 在这种情况下的查询?这样做必须考虑什么?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Steve Sheldon    16 年前

    我首先要证明这是一个问题。您需要使用虚拟数据加载数据库,并观察随着数据库的增大,查询的执行情况。否则,你会花时间优化一些可能不是问题的东西。

    有一件事需要考虑。在我工作过的所有地方,崩溃的不是数千条记录,而是数百万条。你有这个系统,它在一段时间内运行良好,然后即使你投入更多的硬件,它也会开始变慢。我现在工作的地方在他的历史表中有大约7000万条记录,可以追溯到1998年。因此,某些查询的性能非常糟糕,他们花费了大量时间来解决这些问题。

    但在某些时候,你真的必须问。我们是否需要在交易系统中保留4年以上的数据?甚至4个月大?这个时间限制取决于您的业务需求,但如果您只将处理正在进行的工作所需的数据保存在事务系统中……并将您的历史记录归档到数据仓库中。您将提高整体性能,因为您可能只是偶尔需要查询旧数据,那么为什么要将其与最近的数据一起保留呢?

    如果你提前考虑一下,从长远来看,你会省去很多麻烦。