2015-08-15 127 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倍)......除非您在構建列表的方式上做了一些瘋狂的事情,或者顯示代碼中的瓶頸不在檢索中。


您需要使用一些客戶端和服務器端性能工具來找出真正瓶頸是否是客戶端,服務器或網絡。然後使用這些結果來決定在哪裏集中注意力。