SQLite批量插入優化方法

2022-02-19 12:13:21 字數 1886 閱讀 3799

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

可見使用了事務之後卻是極大的提高了資料庫的效率。但是我們也要注意,使用事務也是有一定的開銷的,所以對於資料量很小的操作可以不必使用,以免造成而外的消耗。

internalstaticvoid fastinsertmany(dbconnection cnn)

}  dbtrans.commit();

}catch

}}

SQLite批量資料寫入優化方法

sqlite的資料庫本質上來講就是乙個磁碟上的檔案,所以一切的資料庫操作其實都會轉化為對檔案的操作,而頻繁的檔案操作將會是乙個很好時的過程,會極大地影響資料庫訪問的速度。例如 向資料庫中插入100萬條資料,在預設的情況下如果僅僅是執行 sqlite3 exec db,insert into name...

PHP MySQL批量插入資料的優化方法

mysql批量插入資料的優化方法,廢話少說直接貼 link mysql connect localhost root or die mysql error mysql select db phone link or die mysql error mysql query set names gbk ...

jdbc 批量插入優化

專案中有乙個大資料插入的功能是通過jdbc的批處理實現的,但效率一直不理想。最近研究了一下,做如下總結 1 如果id使用的是uuid,一定要保證有序。因為通常資料庫會為主鍵建立聚集索引。而聚集索引是用來指明資料排序規則的。所以,對於非有序的id,插入的同時會做大量的排序操作,很影響效率。另外,我們在...