用SQLITE插入商品數(shù)據(jù)著瓶,發(fā)現(xiàn)才500條 就需要10多秒時(shí)間,太慢了啼县。后來(lái)查了一下原因材原。如下:
大量插入數(shù)據(jù) SQLITE插入一條數(shù)據(jù),事務(wù)就會(huì)被反復(fù)地開(kāi)啟季眷、關(guān)閉余蟹,會(huì)增大IO量。如果在插入數(shù)據(jù)前顯式開(kāi)啟事務(wù)子刮,插入后再一起提交威酒,則會(huì)大大提高IO效率,進(jìn)而加數(shù)據(jù)快插入速度挺峡。
根據(jù)測(cè)試結(jié)果:不預(yù)先開(kāi)啟事務(wù)葵孤,效率20 條/s。預(yù)先開(kāi)啟事務(wù)效率34095條/s橱赠。
這個(gè)效率差距挺大的尤仍。
//預(yù)先開(kāi)啟事務(wù)
db.execDML("begin;");
//提交并關(guān)閉事務(wù)
db.execDML("commit;");
加上后,幾百條商品數(shù)據(jù)1秒都不要 就插入完畢了病线,不錯(cuò)吓著。
記錄一下
//預(yù)先開(kāi)啟事務(wù)
db.execDML("begin;");
//寫(xiě)入
CppSQLite3Query q;
for (auto&goods : goods_list)
{
sqlw = StrTool::Format(L"insert into %s VALUES(%lld,'%s','%s','%s','%s','%s','%s','%s',%d,'%s',%d,%.2f,%.2f,%d,'%s',%.2f,%.2f,%.2f,%d,%d,'%s');", table_name.c_str(), \
goods.item_id, goods.activity_id.c_str(),goods.title.c_str(), goods.intro.c_str(), goods.item_url.c_str(), goods.pic_url.c_str(), goods.pic_url_2.c_str(), \
goods.coupon_url.c_str(), goods.shop_type, goods.shop_name.c_str(), goods.post_free, goods.price_org, goods.price_discount, goods.sales, goods.me_code.c_str(),\
goods.max_campaign.commission_rate, goods.coupon_start_fee, goods.coupon_fee, goods.coupon_count, goods.coupon_surplus, goods.coupon_expire.c_str());
sqla = StringParse::GBToUTF8(StringParse::WStringToString(sqlw).c_str());
db.execDML(sqla.c_str());
//printf("insert sql:%s\n",sql);
q.finalize();
}
//提交后 關(guān)閉事務(wù)
db.execDML("commit;");