2015-11-04 56 views
0

我正在開發一個應用程序,並考慮使用SQLite。SQLite如何處理大規模查詢?

我的應用程序必須讀取(而不是寫入)大量的數據,通常在4-5GB的範圍內。

所以,如果一個執行以下操作:

SELECT * FROM MASSAVETABLE; 

將SQLite的能夠處理這個大的查詢?更具體地說,它能夠管理查詢的內存使用情況嗎?現在大多數機器只有4GB RAM。

+0

難道你不能試試嗎?請注意,您顯示的代碼本身不會讀取任何內容 - 即獲取結果,但不會在帖子中顯示。 –

回答

2

它會把它全部加載到你的進程內存中,是正確的。

您的操作系統會根據需要對內存進行頁內存分頁,但如果這是32位進程或在沒有頁面交換的嵌入式平臺上,那麼程序將因內存不足錯誤而崩潰。

你真的需要內存中的一切嗎?

+0

真的嗎?爲什麼SQLite會一次將所有內容讀入內存? – Thilo

+0

@thilo,因爲你問它:) SQLite沒有(據我所知)支持遊標和部分結果。您必須自己在模式中實現某種形式的數據分頁。 – Dai

+0

@thilo顯然SQLite不支持遊標,但是你需要編寫程序來明確地使用它們。 – Dai

3

數據庫不會一次將整個結果集讀入內存。您的應用程序必須進行編碼以避免這種情況。這就是遊標的用途。

+0

感謝您的回答。遊標是邪惡的,他們說。那麼我只是編碼它 – user1034912