2010-12-14 81 views
0

爲什麼數據庫的結果集如此之大?我通常會得到大約一百萬行的結果集,每個結果集都包含一些數字,一個varchar(75),一個大的int ...等等。可能不會超過每行100個字節。但它佔用了6 GB!這是典型的行爲嗎?我的堆棧是Postgres + JDBC + Spring - 我沒有任何其他技術的經驗。爲什麼結果集如此之大?

+2

對於任何人給你一個很好的答案,你將不得不對你的整個問題做更多具體的描述。 「什麼」是什麼意思? 「可能」不超過100B /行?做實際的數學,然後問你的問題。 – 2010-12-14 00:40:01

+2

將整個數據庫表複製到Java內存中的原因是什麼?對於你想要達到的目標,可能有更好的解決方案。例如,按批處理或按行處理,或以分頁視圖顯示。 – BalusC 2010-12-14 00:41:26

+0

你如何衡量「它佔用6 GB」? – 2010-12-14 00:41:55

回答

1

我們需要查看查詢以瞭解它爲什麼如此之大。也許你沒有加入表格。 (我希望我可以發表評論...)

+0

恭喜!你現在可以評論! :) – 2010-12-14 00:41:56

+0

Yaaaaaay〜有點令人沮喪,繞過網站尋找我發誓以前見過的按鈕... – Pimgd 2010-12-14 00:43:31

+2

當低於50代表,只有在你自己的問題上評論其他人的帖子。 – BalusC 2010-12-14 00:44:34

2

java.sql.ResultSet本身通常只有幾十行數據緩衝在任何時間(可配置)。

現在,如果您將所有這些行作爲Java對象加載到內存中,那麼您將看到大量的內存使用。例如,String每個字符有兩個字節,兩個對象標題,一個偏移量,兩個長度和一個高速緩存的散列值。 BigInteger與此類似。這一切都加起來。使用分析器。

對緩存行集可能會更好。這或者不會立即加載整個結果集。

相關問題