比較安卓提供的API 執(zhí)行insert谅畅,query登渣,update,delete與execSql毡泻,rawQuery函數(shù)執(zhí)行原生的插入胜茧,查詢,更新牙捉,刪除語句操作花費(fèi)時(shí)間進(jìn)行比較
數(shù)據(jù)量小的話,可能時(shí)間差不多,但是數(shù)量大到一定量的時(shí)候,會(huì)發(fā)現(xiàn)execsql 原生的SQL語句執(zhí)行要更快.因?yàn)榘沧刻峁┑腁PI 實(shí)際上會(huì)拼接成SQL語句在執(zhí)行插入數(shù)據(jù)庫(kù).所有拼接的過程也需要時(shí)間.
大量數(shù)據(jù)插入時(shí)如何優(yōu)化?
測(cè)試了下,直接通過for循環(huán)insert的話,插入較慢,分析了下Monitor 看見,不斷對(duì)磁盤進(jìn)行寫入,而且是成高低谷形狀.想了下,Web開發(fā)的時(shí)候可以通過事務(wù)插入.在安卓開發(fā)也可以.測(cè)了下
db.beginTransaction(); //手動(dòng)設(shè)置開始事務(wù)
?try{
?//批量處理操作?
for(Collection c:colls){ insert(db, c);?
} db.setTransactionSuccessful(); //設(shè)置事務(wù)處理成功竹揍,不設(shè)置會(huì)自動(dòng)回滾不提交敬飒。?
//在setTransactionSuccessful和endTransaction之間不進(jìn)行任何數(shù)據(jù)庫(kù)操作?
}catch(Exception e){ MyLog.printStackTraceString(e);
?}finally{
?db.endTransaction(); //處理完成
?}
發(fā)現(xiàn)就讀寫了一次文件,而且寫入速度也比之前提升了不少.~~