sqlite3提升执行速度——事务操作

数据库在执行多条操作时就会显得速度很慢,为了提升速度可以使用数据库的事务操作来提升速度
一、事务介绍

	事务(Transaction)是一个对数据库执行工作单元。事务(Transaction)是以逻辑顺序完成的工作单位或序列,可以是由用户手动操作
	完成,也可以是由某种数据库程序自动完成。
	例如:在一张表中插入一条数据,删除数据,修改数据,查找数据,都是在执行事务。实际上可以把一些相同操作的事务归并在一起,最后
	一起提交就可以变成一个事务,大大提高了数据库执行的效率。

1.事务操作分类

1."begin transaction" // 开始一个事务 

2."commit transaction"// 提交事务 

3."rollback transaction"//事务回滚,重新执行未提交的事务

2.在执行多次sql操作时可以以下面模板去使用事务

char *err_msg;
int ret;
ret=sqlite3_exec(db,"begin;",0,0,&err_msg);//开始一个事务
for(){

	if(出错){
		sqlite3_exec ( db , "rollback transaction", 0 , 0 ,&exec_err);//事务回滚
	}
}
sqlite3_finalize(stmt);
sqlite3_exec(db,"commit;",0,0,&exec_err);//提交事务

3.demon验证
1>下面demon使用事务插入1000条信息到表中,用时14毫秒
在这里插入图片描述

void sql_class_insert(int age,const char *name,const char *sex)
{
	int res, err = -1;
	char *exec_err;
	sqlite3_stmt *stmt;
	
	//1.执行sql select语句
	res = sqlite3_prepare_v2(db, INSERT_class, -1, &stmt, NULL);

	if (SQLITE_OK != res) {
		goto out;
	}
	int i;
    
	sqlite3_exec(db,"begin;",0,0,0);
	struct timeval start_time;
    struct timeval stop_time;
	gettimeofday(&start_time, NULL);
for(i=0;i<1000;i++){

	sqlite3_reset(stmt); 
	
	//2.绑定数据 int类型
	res = sqlite3_bind_int(stmt, 1, age);
    if (res != SQLITE_OK) 
   	{
		err = -1;   
    }

	//2.绑定数据 字符型
	//SQLITE_STATIC->传递给该字符串的指针将有效,直到执行查询为止
	res = sqlite3_bind_text(stmt, 2, name, -1, SQLITE_STATIC); 
    if (res != SQLITE_OK) 
	{
		err = -1;
    }

	res = sqlite3_bind_text(stmt, 3, sex, -1, SQLITE_STATIC); 
    if (res != SQLITE_OK) 
	{
		err = -1;
    }
	
	//3.遍历select执行的返回结果
	res = sqlite3_step(stmt);

	if (SQLITE_DONE == res) {
		err = 0;
	}
	
	if(err==-1)
	{
		sqlite3_exec ( db , "rollback transaction", 0 , 0 ,&exec_err);
	}
}

	//4.销毁前面被sqlite3_prepare创建的准备语句
	//【每个准备语句都必须使用这个函数去销毁以防止内存泄露】
	sqlite3_finalize(stmt);
	sqlite3_exec(db,"commit;",0,0,0);
	gettimeofday(&stop_time, NULL);
	printf("pay time is %ld毫秒\n",(stop_time.tv_sec * 1000 + stop_time.tv_usec / 1000) 
                - (start_time.tv_sec * 1000 + start_time.tv_usec / 1000));
out:

	if (err < 0) {
		printf("%s\n", sqlite3_errmsg(db));
		printf( "res = %d\n", res);
	}
}

2>j接下来屏蔽掉事务操作
在这里插入图片描述
对比发现屏蔽掉事务后插入速度明显下降

数据库
在这里插入图片描述

完整demon,可以编译运行
下载地址

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值