2009-02-06 32 views
1

我们正在开发一个使用OpenJPA1.1和Oracle DB作为后端存储的持久层的应用程序。我将在子查询中使用查询(请参阅我的问题Solving JPA query finding the last entry in connected list)。在使用haevy加载的数据库的查询中使用子查询应该考虑什么?

现在,我的同事们在工作中指出,这样的查询可能会导致性能问题,因为数据库中充斥着几千名并发用户使用的数千个客户日期(这将成为生产中的现实)。

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

回答

1

我会首先证明这是一个问题。您需要使用虚拟数据加载数据库,并查看您的查询在数据库变大时的表现。否则,你会花时间优化一些可能不成问题的东西。

有一件事要考虑。在我工作过的所有地方,崩溃的地方不是成千上万的记录,而是数百万的记录。你已经有了这个系统,它可以正常工作一段时间,然后就开始放慢速度,即使你扔掉更多的硬件。我现在工作的地方在其历史记录表中可以追溯到1998年,其中有大约7000万条记录。有些查询的结果是非常糟糕的,因此他们花费了大量的时间来解决这些问题。

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

如果您事先考虑这个问题,可以长期节省很多麻烦。