MySQL数据库insert性能优化

12年前未命名
在使用MySQL的时候难免会遇到批量数据inset的情况,通常最简单的方法就是写一个insert,然后通过循环给变量赋值,批量插入数据库:                  //save rddform                 for (int i = 0; i < rddformlist.Count; i++)                 {                     string cmdText = "insert into rddform (ID,CreatedTime,ModifiedTime,CreatedBy,ModifiedBy,FormType) values ('" + rddformlist[i].RddFormGuid + "','" + rddformlist[i].CreateTime + "','" + rddformlist[i].ModifyTime + "','" + rddformlist[i].CreateBy + "','" + rddformlist[i].ModifyBy + "'," + rddformlist[i].FormType + ")";                     MySqlCommand mysqlcom = new MySqlCommand(cmdText, mysqlcon);                     mysqlcom.Transaction = trans;  //绑定事务                               mysqlcom.ExecuteNonQuery();                 }   经过方法经过亲测,性能不太好,本地大概是一秒insert20条数据,云上大概是一秒insert3条数据。两千条数据本地大概就要一分半,云上大概十几分,显然速度太慢了。   现在我们改为多条数据合并插入,就是用一个insert语句插入所有的数据:
//save rddform
               for (int i = 0; i < rddformlist.Count; i++)
                {
                    strRddForm.Append("('" + rddformlist[i].RddFormGuid + "','" + rddformlist[i].CreateTime + "','" + rddformlist[i].ModifyTime + "','" + rddformlist[i].CreateBy + "','" + rddformlist[i].ModifyBy + "','" + rddformlist[i].FormType + "')");
                    if (i<rddformlist.Count-1)
                    {
                        strRddForm.Append(",");
                    }
                }
                MySqlCommand rddformcom = new MySqlCommand(strRddForm.ToString(), mysqlcon);
                rddformcom.Transaction = trans;  //绑定事务           
                rddformcom.ExecuteNonQuery();
  亲测之后两千条本地真的是秒插,云上大概一秒多 注意事项:   SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_packet配置可以修改,默认是1M,测试时修改为8M。   事务需要控制大小,事务太大可能会影响执行的效率。MySQL有innodb_log_buffer_size配置项,超过这个值会把innodb的数据刷到磁盘中,这时,效率会有所下降。所以比  较好的做法是,在数据达到这个这个值前进行事务提交。  

相关文章

论语读书笔记

  学而第八子曰:“君子不重则不威,学则不固。主忠信。无友不如己者。过则勿惮改。”  孔子说::“立志成为君子的人,如果不庄重就没有威严,多方学习就不会固步自封。做人处事要讲求忠和信。不要结交不如自己...

mysql的大小写敏感

mysql的大小写敏感性主要分为两部份:一个是表名区别大小写;二是字段值不区分大小写.这个跟我们希望的恰好相反,而这却是mysql 的默认设置,不得不令人费解,而这些却是oracle数据库比较基本的东...

内置2400mAh电量 可以充电的手机壳上市

万千消费者期盼的酷壳iPhone 6充电版 终于正式发售了,它可以在保证iPhone依旧轻巧的前提下,为其提供足够的电池容量扩展,让用户无需担心手机没电,即使重度使用也能安心使用一整天。酷壳iPhon...

成功是逼出来的

一个人,如果你不逼自己一把,你根本不知道自己有多优秀。一个人,想要优秀,你必须要接受挑战;一个人,你想要尽快优秀,就要去寻找挑战;一个人,敢听真话,需要勇气;一个人敢说真话,需要魄力;一个人的知识,通...

PHP调试时print_r ,var_dump的区别

说到输出,不得不提到php中的打印了。 首先当然是最常用的echo了,echo :输出一个或多个字符串; print:和echo一样,但速度比echo慢。 print_r:      ...

旅行与旅游的区别

少去旅游,多去旅行 我们常把旅游与旅行混为一谈,其实两者可谓差之一字,谬之千里啊。 旅游是一种消遣和消费的过程,花钱享受异地的风光、风情、美食和服务。有人说旅游就是从你活腻味的地方到...