随笔 - 51, 文章 - 1, 评论 - 41, 引用 - 0
数据加载中……

影响SQLite3速度的方法

本文以INSERT为例介绍影响SQLite3速度的方法。

基本方法

SQLite3执行INSERT语句的代码如下:

for (int i=0; i<count; ++i) {

    const char *stmt = “INSERT INTO TABLE VALUES(....)”;

    sqlite3_exec(db, stmt, 0, 0, 0);

} 

开启事务

事务保证数据库执行语句的完整性,是开销较大的动作。每次INSERT语句隐式开启一个事务,多次INSERT语句则会开启多次。显示开启事务可以合并多次INSERT语句的事务,如下:

sqlite3_exec(db,"BEGIN;",0,0,0);

for(int i=0; i<count; ++i) {

    const char *stmt = “INSERT INTO TABLE VALUES(....)”;

    sqlite3_exec(db,ssm.str().c_str(),0,0,0);

}

sqlite3_exec(db,"COMMIT;",0,0,0); 

设置同步

设置synchronous选项,可选值为full、normal、off,默认为full。其值full最安全但最慢,而off最快但数据库存在损坏风险。

sqlite3_exec(db,"PRAGMA SYNCHRONOUS = OFF; ",0,0,0); 

执行准备

如果执行相同的语句,只是数据不同,如INSERT不同的数据项,可预先对执行语句进行预处理。

sqlite3_stmt *stmt;

const char* sql = "INSERT INTO TABLE VALUES(?,?)";

sqlite3_prepare_v2(db,sql,strlen(sql),&stmt,0);

 

for(int i=0; i<count; ++i) {

    sqlite3_reset(stmt);

    sqlite3_bind_int(stmt,1,i);

    sqlite3_bind_double(stmt,2,i*i);

    sqlite3_step(stmt);

}

sqlite3_finalize(stmt);

posted on 2015-11-19 19:09 lemene 阅读(478) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理