2009-02-06 35 views
1

我們正在開發一個使用OpenJPA1.1和Oracle DB作爲後端存儲的持久層的應用程序。我將在子查詢中使用查詢(請參閱我的問題Solving JPA query finding the last entry in connected list)。在使用haevy加載的數據庫的查詢中使用子查詢應該考慮什麼?

現在,我的同事們在工作中指出,這樣的查詢可能會導致性能問題,因爲數據庫中充斥着幾千名併發用戶使用的數千個客戶日期(這將成爲生產中的現實)。

所以,我的問題是:在這種情況下,有沒有在查詢中使用子查詢的「最佳做法」?這樣做必須考慮什麼?

回答

1

我會首先證明這是一個問題。您需要使用虛擬數據加載數據庫,並查看您的查詢在數據庫變大時的表現。否則,你會花時間優化一些可能不成問題的東西。

有一件事要考慮。在我工作過的所有地方,崩潰的地方不是成千上萬的記錄,而是數百萬的記錄。你已經有了這個系統,它可以正常工作一段時間,然後就開始放慢速度,即使你扔掉更多的硬件。我現在工作的地方在其歷史記錄表中可以追溯到1998年,其中有大約7000萬條記錄。有些查詢的結果是非常糟糕的,因此他們花費了大量的時間來解決這些問題。

但在某些時候,你確實需要問。我們是否需要在交易系統中保存超過4年的數據?甚至4個月大?這個時間限制取決於您的業務需求,但是如果您僅使用處理正在進行的工作所需的數據來保存交易系統,並將其歸檔到數據倉庫中,則可以記錄您的歷史記錄。你會提高你的整體性能,因爲偶爾你需要查詢舊數據,所以爲什麼要保留最近的數據呢?

如果您事先考慮這個問題,可以長期節省很多麻煩。