优化

前端之家收集整理的这篇文章主要介绍了优化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
sqlite3和其他数据库一样,提供了事务的概念。对于一条sql语句的执行,我们几乎感觉不到花费的时间,或者可以忽略不计。但是如果同时插入1000条或者更多记录时,我们必须考虑执行的性能。下面是两个同时插入1000条记录的例子,前者是优化前的,后者是优化后的。它们的执行性能有明显的差别,前者执行时间:109.7810ms,后者执行时间仅为:0.1710ms。

优化前代码

#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"

int main()
{
double start,finish;
sqlite3 *db;
sqlite3_stmt* stmt;
const char *zTail;
char *zErrMsg=0;
int r=sqlite3_open("test.db",&db);
if(r){
printf("error happened:%s\n",sqlite3_errmsg(db));
}

char* sql="create table [test]([id] INTEGER PRIMARY KEY,[s] TEXT COLLATE NOCASE)";

start=(double)clock();

r=sqlite3_exec(db,sql,NULL,&zErrMsg);
if(r!=sqlITE_OK)
{
printf("error happend:%s\n",zErrMsg);
}

sqlite3_prepare(db,"insert into test(s) values(?);",-1,&stmt,&zTail);

int i;
for(i=0;i<1000;i++)
{
sqlite3_bind_int(stmt,1,i);
r=sqlite3_step(stmt);
sqlite3_reset(stmt);
}
sqlite3_finalize(stmt);

finish=(double)clock();
printf("%.4fms",(finish-start)/1000);
}

优化后代码

#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"

int main()
{
double start,zErrMsg);
}

/*此处为添加的优化代码*/

r=sqlite3_exec(db,"BEGIN;",&zErrMsg);/*手动开始事务*/

sqlite3_prepare(db,i);
r=sqlite3_step(stmt);
sqlite3_reset(stmt);
}
sqlite3_finalize(stmt);

/*添加的优化代码结束事务*/

r=sqlite3_exec(db,"COMMIT;",&zErrMsg);/*结束事务,提交*/ /* 这样sqlite将把全部要执行的sql语句先缓存在内存当中,然后等到COMMIT的时候一次性的写入数据 库,这样数据库文件只被打开关闭了一次,效率自然大大的提高。有一组数据对比: 优化前后时间对比: 前:109。7810ms 后:0.1710ms 可见时间相差之大 */ finish=(double)clock(); printf("%.4fms",(finish-start)/1000);

猜你在找的Sqlite相关文章