anroid Sqlite批量插入資料最佳化方法

來源:互聯網
上載者:User

標籤:

SQLite的資料庫本質上來講就是一個磁碟上的檔案,所以一切的資料庫操作其實都會轉化為對檔案的操作,而頻繁的檔案操作將會是一個很好時的過程,會極大地影響資料庫存取的速度。例如:向資料庫中插入100萬條資料,在預設的情況下如果僅僅是執行 
sqlite3_exec(db, “insert into name values ‘lxkxf‘, ‘24‘; ”, 0, 0, &zErrMsg); 
將會重複的開啟關閉資料庫檔案100萬次,所以速度當然會很慢。因此對於這種情況我們應該使用“事務”。 
具體方法如下:在執行SQL語句之前和SQL語句執行完畢之後加上 
rc = sqlite3_exec(db, "BEGIN;", 0, 0, &zErrMsg); 
//執行SQL語句 
rc = sqlite3_exec(db, "COMMIT;", 0, 0, &zErrMsg);這樣SQLite將把全部要執行的SQL語句先緩衝在記憶體當中,然後等到COMMIT的時候一次性的寫入資料庫,這樣資料庫檔案只被開啟關閉了一次,效率自然大大的提高。有一組資料對比:測試1: 1000 INSERTs 
CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100)); 
INSERT INTO t1 VALUES(1,13153,‘thirteen thousand one hundred fifty three‘); 
INSERT INTO t1 VALUES(2,75560,‘seventy five thousand five hundred sixty‘); 
... 995 lines omitted 
INSERT INTO t1 VALUES(998,66289,‘sixty six thousand two hundred eighty nine‘); 
INSERT INTO t1 VALUES(999,24322,‘twenty four thousand three hundred twenty two‘); 
INSERT INTO t1 VALUES(1000,94142,‘ninety four thousand one hundred forty two‘); 
SQLite 2.7.6: 
13.061 
SQLite 2.7.6 (nosync): 
0.223
測試2: 使用事務 25000 INSERTs 
BEGIN; 
CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100)); 
INSERT INTO t2 VALUES(1,59672,‘fifty nine thousand six hundred seventy two‘); 
... 24997 lines omitted 
INSERT INTO t2 VALUES(24999,89569,‘eighty nine thousand five hundred sixty nine‘); 
INSERT INTO t2 VALUES(25000,94666,‘ninety four thousand six hundred sixty six‘); 
COMMIT; 
SQLite 2.7.6: 
0.914 
SQLite 2.7.6 (nosync): 
0.757
可見使用了事務之後卻是極大的提高了資料庫的效率。但是我們也要注意,使用事務也是有一定的開銷的,所以對於資料量很小的操作可以不必使用,以免造成而外的消耗。
android中的方法,

解決方案:

添加交易處理,把5000條插入作為一個事務

dataBase.beginTransaction();        //手動設定開始事務

//資料插入操作迴圈

dataBase.setTransactionSuccessful();        //設定交易處理成功,不設定會自動復原不提交

dataBase.endTransaction();        //處理完成 




PS,在android中一般是使用ContentResolver來封裝下sqlite,內建一個批量插入的方法public final int bulkInsert (Uri url, ContentValues[] values)Since: API Level 1

Inserts multiple rows into a table at the given URL. This function make no guarantees about the atomicity of the insertions.

Parameters
url The URL of the table to insert into.
values The initial values for the newly inserted rows. The key is the column name for the field. Passing null will create an empty row.
Returns
  • the number of newly created rows. 

anroid Sqlite批量插入資料最佳化方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.