几个月没有更新笔记了,最近遇到一个坑爹的问题,顺道记录一下。。

需求是这样的:一次性修改上万条数据库。

项目是用MVC+linq的。

本来想着用 直接where()

1
var latentCustomerList = this.FindAll().Where(m => arrId.Contains(m.CustomerID.ToString())).ToList();

这样子执行,意料之中的就是出错了,出啥错,自己试了就知道了。哈哈

想来就只有直接操作数据库了。第一次的想法,直接就是for拼接语句,拼是拼了。

1
2
3
4
5
6
for (int i = 0; i < obaList.Count; i++)
               {
                   arrId[i] = obaList[i].CustomerID.ToString();
                   sbUpdateSqlStr.AppendFormat("update dbo.Customer set IsValid=1 where CustomerID='{0}' ;  ", arrId[i]);
                    
               }

可是执行起来总共花费了7秒。第二次花费4.5秒,第三次5秒。

数据库都是争分夺毫秒。这样拼了一万多条的语句还真不是办法。调试进去也许你也会崩溃。。。就想着能不能快,再快。就想到了IN

于是就改成了下面的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for (int i = 0; i < obaList.Count; i++)
                {
                    arrId[i] = obaList[i].CustomerID.ToString();
                    if (i != 0 && i % 50 == 0)
                    {
                        ids = ids.Remove(ids.Length - 1);
                        sbUpdateSqlStr.AppendFormat("update dbo.Customer set IsValid=1 where CustomerID in({0}) ;  ", ids);
                        ids = "'" + arrId[i] + "',";
                    }
                    else
                    {
                        ids += "'" + arrId[i] + "',";
                    }
                     
                }

看看总共的执行时间吧。。

也只能是这样的速度了...

说说最后的思想吧,其实就是减少执行语句数量的问题,把原本需要执行12223条的语句,减少了50倍,也就是245条。效率不言而喻了。(实际使用需要结合数据库索引以及in的问题。)

做到这,想到Excel导入数据库的时候是不是也会有另外一种优化方法。。。

菜鸟求教,请勘误。

本文从百度空间搬家到博客园。。

sql执行万条update语句优化的更多相关文章

  1. 一条update语句优化小记

    遇到性能问题的sql如下: sql1: UPDATE amlclientlevel a SET    a.client_value = (SELECT l.client_value           ...

  2. 完蛋,公司被一条 update 语句干趴了!

    大家好,我是小林. 昨晚在群划水的时候,看到有位读者说了这么一件事. 在这里插入图片描述 大概就是,在线上执行一条 update 语句修改数据库数据的时候,where 条件没有带上索引,导致业务直接崩 ...

  3. MySQL实战 | 01-当执行一条 select 语句时,MySQL 到底做了啥?

    原文链接:当执行一条 select 语句时,MySQL 到底做了啥? 也许,你也跟我一样,在遇到数据库问题时,总时茫然失措,想重启解决问题,又怕导致数据丢失,更怕重启失败,影响业务. 就算重启成功了, ...

  4. 一条update语句到底加了多少锁?带你深入理解底层原理

    迎面走来了你的面试官,身穿格子衫,挺着啤酒肚,发际线严重后移的中年男子. 手拿泡着枸杞的保温杯,胳膊夹着MacBook,MacBook上还贴着公司标语:"我爱加班". 面试开始,直 ...

  5. SQL语法基础之UPDATE语句

    SQL语法基础之UPDATE语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看UPDATE语句的帮助信息 1>.查看UPDATE的帮助信息 mysql> ? ...

  6. 如何将多条update语句合并为一条

    需求: 如何将多条update语句合并为一条update语句:如,update table1 set col='2012' where id='2014001'      update table1  ...

  7. MySQL45讲:一条update语句是怎样执行的

    首先创建一张表: create table T(ID int primary key,c int); 如果要更新ID=2这行+1:应该这样写 update T set c=c+1 where ID=2 ...

  8. Sql Server执行一条Update语句很慢,插入数据失败

    今天同事要我修改服务器数据库里面的2条数据,查看服务器上的SQL Server数据库的时候,发现这几天数据没有添加成功,然后发现磁盘很快就满了,执行Update语句时,执行半天都提示还在执行,查询语句 ...

  9. sql server中同时执行select和update语句死锁问题

    原始出处 http://oecpby.blog.51cto.com/2203338/457054 最近在项目中使用SqlServer的时候发现在高并发情况下,频繁更新和频繁查询引发死锁.通常我们知道如 ...

随机推荐

  1. [OJ] Find Minimum in Rotated Sorted Array II

    LintCode 160. Find Minimum in Rotated Sorted Array II (Medium) LeetCode 154. Find Minimum in Rotated ...

  2. 通过ip获取地理位置信息

    http://ipinfo.io/developers 直接使用get请求  url: http://ipinfo.io/json    即可获得json数据

  3. 查看本机上的端口使用情况netstat -an

    1.查找本机上的端口使用情况 netstat -an 2.查找指定端口的使用情况 C:\Windows\System32>netstat -ano | find "8002" ...

  4. linux使用man命令后退出

    linux使用man命令后 使用q退出

  5. linux VM命令下查找

    使用vi编辑器编辑长文件时,常常是头昏眼花,也找不到需要更改的内容. 这时,使用查找功能尤为重要. 方法如下: 1.命令模式下输入“/字符串”,例如“/Section 3”. 2.如果查找下一个,按“ ...

  6. WordPress RokIntroScroller插件‘thumb.php’多个安全漏洞

    漏洞名称: WordPress RokIntroScroller插件‘thumb.php’多个安全漏洞 CNNVD编号: CNNVD-201309-383 发布时间: 2013-09-24 更新时间: ...

  7. JDBC初步 JDBC连接SQLServer 2008之心路历程

    转自:http://www.cnblogs.com/weilengdeyu/archive/2013/01/17/2864321.html JDBC简介 今天,研究了下JDBC连接SQL Server ...

  8. Ubuntu 使用apt-get时提示错误:无法获得锁 /var/lib/dpkg/lock

    推荐博客:http://blog.sina.com.cn/s/blog_5c1450a8010188ju.html Ubuntu 使用apt-get时提示错误:无法获得锁 /var/lib/dpkg/ ...

  9. JavaScript---网络编程(8)-DHTML技术演示(1)

    DHTML技术使用的基本思路: 1. 用标签封装数据-html范畴 2. 定义样式-css范畴 3. 明确事件源.事件和要处理的节点-dom范畴 4. 明确具体的操作方式,其实就是事件的处理内容(过程 ...

  10. 【好文转载c++】 sizeof 使用的经典总结

    为了在人面前畅快的吹牛逼,你必须学会背后努力  -----张小二. 写在转载之前: sizeof到底是多少?本来我没有关注,只是有次室友问了我几个sizeof的问题,我被问住了,他当时问我了sizeo ...