C++操作mysql数据库效率问题

做毕设过程中使用了c++对mysql进行操作的一些API,本质是一个c的库。

遇到了一个小问题,就是对于多行数据的存取效率。

(1)我的代码中主要是利用mysql_query()函数与数据库进行交互,而在实际操作中,每一条mysql_query()语句对于数据库来说不仅仅是一条命令的执行,更是一个事务的提交。

所以对于需要循环插入大量数据的情况,频繁的事务创建和销毁会浪费很多时间,解决办法:

    mysql_query(mysql,"START TRANSACTION");//开启事务,提高传输效率
    while(getline(my_file,data_temp)){
        sql = "";//构造sql语句
        if(mysql_query(mysql,sql.c_str())){
            cout<<"第"<<data_num<<"条数据入库失败:"<<mysql_error(mysql)<<endl;
            cout<<"出错的sql语句为:"<<sql<<endl;
        }
    }
    if(mysql_query(mysql,"COMMIT")){//提交事务
        cout<<"临时数据入库失败!"<<mysql_error(mysql)<<endl;
        cout<<"出错的sql语句为:"<<sql<<endl;
    }

将整个数据循环插入的过程封装为一个事务(mysql默认一次query一个事务,此处为自己声明的事务)。

(2)另外,我用的c++语言,mysql_query()参数需要用char* 类型,所以通过c_str()函数进行转换。

这里就涉及到了另一个问题,即构造所需的sql string的效率问题,经过测试,对一些固定的字符串转化为变量,构造字符串的开销可以节省近乎一半的时间(测试了十万条数据)。

简单来说就是:

    string str1 = "hello";
    string str2 = "world";
    string str3 = " ";
    string str4;
    for(int i=0;i<100000;++i){
        str4 = str1+str3+str2;
    }

声明一些变量来存放需要多次重复使用的字符串,而不要像下面一样直接加字符串常量。

str4 = "hello" + str3 + "world";

这一点对于需要大量构造的字符串来说具有一定意义,当然c++的高效使得这种体验感差异很小。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值