2015-08-15 130 views
-1

在Java代码中,我试图从DB(Oracle)中获取3500行。加载数据需要将近15秒的时间。我已经找到将结果存储在缓存中并从缓存中取回。我使用简单的Select语句并显示单个表中的8列(不使用连接)。使用List来保存来自数据库的数据并将其用作Datatable的源。我也从硬件方面考虑过如RAM容量,存储容量,网络速度等......它超出了最低要求。你能帮助更快做到(不应该超过3秒)吗?Java中的性能优化

+3

请发布查询;这里有很多人可以提供加速的建议。 –

+0

如果3.5k行需要15秒,这很可能是一个计划不周或可计划的查询。但没有更多细节..(查询可能不是独立于连接的SARGABLE;例如,可能没有合适的索引来覆盖条件) – user2864740

+0

花费的时间几乎肯定是完全在数据库或JDBC驱动程序中。在Java中添加3500条记录到列表中应该花费毫秒或更少。 –

回答

0

你是否实现了适当的索引到你的表?我不想问这个问题,因为这是优化查询表的基本方法,你提到你已经尝试了几种方法。对我而言,其中一个解决方法是,如果查询的目的是显示结果,则代码可以设计为在查询仍然载入更多数据时立即显示初始数据。这意味着要实现一个单独的线程来加载和单独的线程来显示。

+1

对于'简单查询',15秒是15秒(并且太长)。使用线程可以*隐藏*问题,可能(取决于结果如何使用),但它不会*修复*问题。 – user2864740

0

这是最有可能的是,核心的问题是,你有以下的一种或多种:

  • 设计不良的架构,
  • 设计不良的查询,
  • 的严重超载的数据库,和/或
  • 数据库与客户端之间的网络连接严重过载/数据不足。

没有任何改变客户端(Java)代码的数量可能会产生显着差异(即增加5倍)......除非您在构建列表的方式上做了一些疯狂的事情,或者显示代码中的瓶颈不在检索中。


您需要使用一些客户端和服务器端性能工具来找出真正瓶颈是否是客户端,服务器或网络。然后使用这些结果来决定在哪里集中注意力。