关于mysql数据库快速插入方法

来源:互联网 发布:宁海知豆招聘 编辑:程序博客网 时间:2024/06/05 06:27

写技术类文章出于三个目的,第一,对自己写过的东西做一次总结,温故而知新,第二,希望好友中的大神门对小弟的方法加以改进和建议,第三,对于刚入门的程序员提供有限的建议和方法,人帮我,我帮人!

关于mysql 的插入语句,大家最熟悉不过了, 下面这两句语句实现对mysql数据库的插入
sprintf(query, "insert into useritem (username,name,type,level,amount) values ( '%s','%s','%s','%s',1);",Tusername,BuyName,type,level);
mysql_query(&_mysql, query);

但大家有没有想过如果同时上千条,上万条,甚至插入百万条记录,这时就不的不考虑一个效率问题了,

普通处理方法:用for()循环插入
for(int i=0;i<1000;i++)
{
    sprintf(query, "insert into useritem (username,name,type,level,amount) values ( '%s','%s','%s','%s',1);",Tusername,BuyName,type,level);
    mysql_query(&_mysql, query);
}
上述方法当然能够实现需求,但是效率不行,大约插入1000条几率所用时间为7S

那有没有方法提高效率?ps:这句话好SB,如果没有,我还写个虾球哦!呵呵~~~~~

MySQL默认的数据提交操作模式是自动提交模式(autocommit)。这就表示每个查询都被当做一个单独的事务自动执行。我们可以通过设置autocommit的值改变是否是自动提交autocommit模式

 MySQL默认的存储引擎是MyISAM,MyISAM存储引擎不支持事务处理,所以改变autocommit没有什么作用,InnoDB存储引擎支持事务处理。InnoDB表引擎下关闭mysql自动事物提交可以大大提高数据插入的效率,这是因为如果需要插入1000条数据,mysql会自动发起(提交)1000次的数据写入请求,如果把autocommit关闭掉,通过程序来控制,只要一次commit就可以搞定:

bool ConnectDatabase()  //连接数据库

    //初始化mysql 
    mysql_init(&_mysql);  //连接mysql,数据库
int ret;
ret = mysql_options(&_mysql, MYSQL_SET_CHARSET_NAME, "gb2312");
if(ret ==0 )
{
  printf("options success\n");
}
    if( ! mysql_real_connect(&_mysql,host_name,user_name,password,db_name,0,NULL,0))
    { 
        printf( "Error connecting to database:%s\n",mysql_error(&_mysql)); 
        return false; 
    } 
    else 
    { 
        printf("Connected...\n");
  mysql_autocommit(&_mysql, 0);  //关闭自动提交
        return true; 
    } 
}

sprintf(query, "insert into useritem (username,name,type,level,amount) values ( '%s','%s','%s','%s',1);",Tusername,BuyName,type,level);
  for( i = 0;i<1000i++)
{
              
        mysql_query(&_mysql, query);
        if(i == 999)
        {
            mysql_commit(&_mysql);//提交
         }
  }
红色代码段就是实现快速插入的代码,这样经过测试 插入1000纪录大约所花时间 2.4S,随着插入数量越多,优势就体现的更明显

0 0
原创粉丝点击