2012-10-09 41 views
11

在stackoverflow上有幾個與此主題相關的問題,但我沒有得到正確的答案。我對平面文件的性能有些懷疑,使用平面文件而不是SQLite更好嗎?如何提高android的SQLite數據庫的性能

我參加了Android SQLite的性能統計。

我有一個表的性能統計信息具有21列

任何人都可以請建議如何減少這種插入時間。

Records Write time in ms Read time in ms 
1000  67813     608 
1000  66340     604 
1000  64359     609 
10000  679837     5159 
10000  618062     5110 
10000  644638     5729 
10000  646878     5890 

Flat file有較少的時間,而不是SQLite

所以有人請建議我我如何才能改善這個時間的SQLite。

我正在使用簡單的database open insert using ContentValues和數據庫關閉。

請告訴我一些事情如何改善這些統計數據。

使用下面的答案後更新了性能統計信息。即使我想提高這些性能。

Records Writetime in ms   Readtime in ms 
1000  1645      530   
1000  2497      672   
1000  3143      610   
10000  16356      5243   
10000  14006      5122   
10000  13158      5002   
10000  14828      5234   
100000  125525     77622 

感謝

+1

如果你想優化插入時間你應該張貼您的插入代碼。 – keyser

+0

平面文件和SQLite有着不同的目標,一個是批量檢索存儲,SQLite用於快速檢索(在大多數情況下快於文本文件) – dvhh

+0

使用大量插入事務 – njzk2

回答

15

我相信你使用的是循環將1000或10000。 使用TRANSACTIONS,它會大大減少寫入時間。我已經遇到過這樣的問題,並且將我的案例的寫入時間從大約30秒縮短到大約不到1秒。請參考this

基本上,你應該做的是:

db.beginTransaction(); 
try{ 
    for(int i = 0 ; i < LENGTH ; i++) { 
     // execute SQL 
    } 
    db.setTransactionSuccessful(); // marks a commit 
    } 
finally{ 
    db.endTransaction(); 
} 
+0

哦,真的非常感謝,讓我試試 –

+0

我在哪裏必須在這裏使用插入查詢? –

+0

在這裏我不需要打開數據庫並關閉我的代碼中的數據庫? –