sql执行万条update语句优化
几个月没有更新笔记了,最近遇到一个坑爹的问题,顺道记录一下。。
需求是这样的:一次性修改上万条数据库。
项目是用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语句优化的更多相关文章
- 一条update语句优化小记
遇到性能问题的sql如下: sql1: UPDATE amlclientlevel a SET a.client_value = (SELECT l.client_value ...
- 完蛋,公司被一条 update 语句干趴了!
大家好,我是小林. 昨晚在群划水的时候,看到有位读者说了这么一件事. 在这里插入图片描述 大概就是,在线上执行一条 update 语句修改数据库数据的时候,where 条件没有带上索引,导致业务直接崩 ...
- MySQL实战 | 01-当执行一条 select 语句时,MySQL 到底做了啥?
原文链接:当执行一条 select 语句时,MySQL 到底做了啥? 也许,你也跟我一样,在遇到数据库问题时,总时茫然失措,想重启解决问题,又怕导致数据丢失,更怕重启失败,影响业务. 就算重启成功了, ...
- 一条update语句到底加了多少锁?带你深入理解底层原理
迎面走来了你的面试官,身穿格子衫,挺着啤酒肚,发际线严重后移的中年男子. 手拿泡着枸杞的保温杯,胳膊夹着MacBook,MacBook上还贴着公司标语:"我爱加班". 面试开始,直 ...
- SQL语法基础之UPDATE语句
SQL语法基础之UPDATE语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看UPDATE语句的帮助信息 1>.查看UPDATE的帮助信息 mysql> ? ...
- 如何将多条update语句合并为一条
需求: 如何将多条update语句合并为一条update语句:如,update table1 set col='2012' where id='2014001' update table1 ...
- MySQL45讲:一条update语句是怎样执行的
首先创建一张表: create table T(ID int primary key,c int); 如果要更新ID=2这行+1:应该这样写 update T set c=c+1 where ID=2 ...
- Sql Server执行一条Update语句很慢,插入数据失败
今天同事要我修改服务器数据库里面的2条数据,查看服务器上的SQL Server数据库的时候,发现这几天数据没有添加成功,然后发现磁盘很快就满了,执行Update语句时,执行半天都提示还在执行,查询语句 ...
- sql server中同时执行select和update语句死锁问题
原始出处 http://oecpby.blog.51cto.com/2203338/457054 最近在项目中使用SqlServer的时候发现在高并发情况下,频繁更新和频繁查询引发死锁.通常我们知道如 ...
随机推荐
- Qt浅谈之三十九圆形进度条(已经有50篇了)
http://blog.csdn.net/taiyang1987912/article/category/2314763
- Android 获取SDCard上图片和视频的缩略图
获取图片缩略图和视频缩略图的方法: Java代码: import java.io.File; import android.app.Activity; import android.graphics. ...
- Serif和Sans-serif字体的区别(转)
在西方国家罗马字母阵营中,字体分为两大种类:Sans Serif和Serif,打字机体虽然也属于Sans Serif,但由于是等宽字体,所以另外独立出Monospace这一种类,例如在Web中,表示代 ...
- java学习之创建线程方法二
我们上一节当中讲到了创建线程的第一种方法,就是继承Thread类,覆写Thread当中的run方法,然后创建子类对象,之后调用对象的start方法启动线程.但是这种方法有一个缺陷,因为我们知道在jav ...
- TC598 div2
题意:给一些物品item[],这些物品的重量在101至300之间,要将这些物品全部放进若干个bins中,已知bins盛的重量为300,可以将bins装满也可以不装满, 问放这些物品最少需要几个bins ...
- POJ_3045_Cow_Acrobats_(贪心)
描述 http://poj.org/problem?id=3045 n头牛,每头牛都有重量w[i]和力量s[i].把这n头牛落起来,每头牛会有一个危险值,危险值是它上面所有牛的重量和减去它的力量.求危 ...
- BZOJ2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 284 Solved: 82[Submit][St ...
- Cocos2d-x学习之windows 7的visual studo 2010开发环境安装
1.引擎代码的下载 官方版本地址为: http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Download 目前最新版本是cocos2d-2.0-rc0a ...
- HDJ -- 1022
#include<iostream> #include<cstdio> #include<string> #define MAXN 10 using namespa ...
- Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子
Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子 第一个例子都是比较简单的博客园登录界面,就像学习编程语言时候都是从Hello,World!开始. 1 ...