日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

SQLite中利用事务处理优化DB操作

發(fā)布時(shí)間:2025/3/15 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQLite中利用事务处理优化DB操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前幾天Android應(yīng)用開發(fā)過(guò)程中碰到一個(gè)問(wèn)題,當(dāng)將大量數(shù)據(jù)插入到數(shù)據(jù)庫(kù)(sqlite3)時(shí),在Log中發(fā)現(xiàn)獨(dú)立線程進(jìn)行處理的約上百次insert操作竟然耗費(fèi)了10.6s 的時(shí)間。

for (int i = 0; i < headers.length; i++) {
// ...
dataBase.insert(tableName, fields);
}


考慮如何提升操作性能時(shí),在SQLite的官方網(wǎng)站上的常用問(wèn)答中找到了以下的信息:

By default, each INSERT statement is its own transaction. But if you surround multiple INSERT statements with?BEGIN...COMMITthen all the inserts are grouped into a single transaction. The time needed to commit the transaction is amortized over all the enclosed insert statements and so the time per insert statement is greatly reduced.


就insertion操作自身來(lái)看,每一次的調(diào)用都會(huì)默認(rèn)被當(dāng)成一次事務(wù)(transaction)來(lái)進(jìn)行處理,其中就包含了開啟、提交、結(jié)束事務(wù)等基本元操作。代碼中的大量插入數(shù)據(jù)操作,使得這些基本操作被重復(fù)執(zhí)行了N次。大塊的執(zhí)行時(shí)間無(wú)疑會(huì)被白白耗費(fèi)掉。同時(shí)注意到Android SDK文檔的SQLiteDatabase也給出了對(duì)于事務(wù)處理的標(biāo)準(zhǔn)調(diào)用方式:

db.beginTransaction();
try {
// do something
db.setTransactionSuccessful();
}
finally {
db.endTransaction();
}


OK, 貼圖對(duì)比看下改進(jìn)后同樣的操作所耗費(fèi)的時(shí)間吧 (debug下0.16s, 是的兩者數(shù)量級(jí)相差有近百倍) ;)

轉(zhuǎn)載請(qǐng)注明出處??http://www.cnblogs.com/raywalker/archive/2011/09/18/SQLite_insertion_optimization.html

轉(zhuǎn)載于:https://www.cnblogs.com/raywalker/archive/2011/09/18/SQLite_insertion_optimization.html

總結(jié)

以上是生活随笔為你收集整理的SQLite中利用事务处理优化DB操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。