关于大数据批量更新的看法
2013-03-11 18:03
309 查看
需求:更新一表某字段,数据量4W。
一开始为了不反复访问数据库就把4W条sql语句拼接到了一起
结果发现在本地运行要8分钟,在服务器运行直接系统内存不足,因为服务器还运行了其他程序
详情见http://bbs.csdn.net/topics/390388642
最后改成了存储过程,因为存储过程有如下特点:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权
服务器执行更新程序的时候,突然公司跳闸了,没看到服务器具体的执行时间,回来已经更新完成。本地测试了下10秒内就完成了4W数据量的更新。
另外做批量可以用到事务+多线程。
附上代码
View Code
一开始为了不反复访问数据库就把4W条sql语句拼接到了一起
结果发现在本地运行要8分钟,在服务器运行直接系统内存不足,因为服务器还运行了其他程序
详情见http://bbs.csdn.net/topics/390388642
最后改成了存储过程,因为存储过程有如下特点:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权
服务器执行更新程序的时候,突然公司跳闸了,没看到服务器具体的执行时间,回来已经更新完成。本地测试了下10秒内就完成了4W数据量的更新。
另外做批量可以用到事务+多线程。
附上代码
View Code
string first = null; string second = null; protected void Page_Load(object sender, EventArgs e) { } public void DB() { string sql=null; DataTable dt = new DataTable(); dt = Manage.GetAllNop_ProductVariant(); IList<Nop_Category> list = new List<Nop_Category>(); list = Manage.GetAllNop_Category(); for (int i = 0; i < dt.Rows.Count; i++)//这里是4级分类的判断 { int categoryID=Convert.ToInt32(dt.Rows[i]["categoryID"]); int parentCategoryID = Convert.ToInt32(dt.Rows[i]["parentCategoryID"]); int productVariantId = Convert.ToInt32(dt.Rows[i]["productVariantId"]); int pcid=Manage.GetParentCategoryIDByCategoryID(parentCategoryID); if (pcid != 0) { int childId = Manage.GetParentCategoryIDByCategoryID(pcid); if (childId != 0) { string yi = Manage.GetNameByCategoryID(childId); string er = Manage.GetNameByCategoryID(pcid); QuanJu(yi, er); // sql += "update [Nop_ProductVariant] set SKU='c'+'" + first + "'+'" + second + "'+RIGHT('00000'+CAST(ProductID AS VARCHAR),6) " //+ "where [ProductVariantId]=" + productVariantId + ";"; Manage.UpdateSKU(first,second,productVariantId); } else { string yi = Manage.GetNameByCategoryID(pcid); string er = Manage.GetNameByCategoryID(parentCategoryID); QuanJu(yi, er); // sql += "update [Nop_ProductVariant] set SKU='c'+'" + first + "'+'" + second + "'+RIGHT('00000'+CAST(ProductID AS VARCHAR),6) " //+ "where [ProductVariantId]=" + productVariantId + ";"; Manage.UpdateSKU(first, second, productVariantId); } } else { string yi = Manage.GetNameByCategoryID(parentCategoryID); string er = Manage.GetNameByCategoryID(categoryID); QuanJu(yi, er); // sql += "update [Nop_ProductVariant] set SKU='c'+'" + first + "'+'" + second + "'+RIGHT('00000'+CAST(ProductID AS VARCHAR),6)" //+ " where [ProductVariantId]=" + productVariantId + ";"; Manage.UpdateSKU(first, second, productVariantId); } } // Manage.update(sql); }
相关文章推荐
- 关于大数据批量更新的问题(高性能)
- 关于Dataset批量更新数据的实例方法
- 关于电脑的一些个人看法(更新)
- 关于MySQL在项目中批量更新
- 关于批量更新
- 关于大数据处理和Hadoop的一些文章【持续更新】
- 关于mysql 批量更新开关在mycat中失效的问题
- 关于Neo4j和Cypher批量更新和批量插入优化的5个建议
- 关于mybatis的批量更新完整版
- 一个批量更新的sql语句引发的关于创业者心态的思考
- 关于ASP中如何批量数据更新?
- 关于批量更新的问题
- 【转】关于批量数据更新的问题(C#高性能)
- 关于Neo4j和Cypher批量更新和批量插入优化的5个建议
- 关于批量数据更新的问题(C#高性能)
- 关于SQL触发器批量更新的问题
- 关于大数据、算法的几点看法
- 关于批量数据更新的问题(C#高性能)
- 关于客户主数据的批量更新
- 关于大数据相关的问答汇总,持续更新中~