用游标更新表,速度异常慢

eaglerxa 2008-06-23 11:40:15
AB表均为6w多条记录,用游标打开B,然后根据条件update A from B
居然10多分中还没完成。。。。。。不正常吧??
...全文
150 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
eaglerxa 2008-06-27
  • 打赏
  • 举报
回复
是啊,游标不知怎么回事
结果是用了很多次的update,一次次手动更新反倒更快,寒一个
ChinaITOldMan 2008-06-27
  • 打赏
  • 举报
回复
可以用批量更新,为什么要用cursor啊
灰太狼 2008-06-27
  • 打赏
  • 举报
回复
游标的效率太差了,能不用最好别用
liusaup 2008-06-27
  • 打赏
  • 举报
回复
此种场合使用游标当然效率低!能不使用游标就不要使用!
eaglerxa 2008-06-23
  • 打赏
  • 举报
回复
怎么这么乱

begin tran
declare cr cursor for select px, k, s, g, n, x from #tt
open cr
fetch next from cr into @Px, @k, @S, @g ,@n , @x
while @@fetch_Status = 0
begin
if @px = 1
begin
update kuan
set fs1 = @stone ,
fs1 = @Guig,
fs1 = @Num,
fs1 = @xiangf
where Temcode = @kuanh
end else
if @px =2
begin
update kuan
set fs2 = @stone ,
fs2 = @Guig,
fs2 = @Num,
fs2 = @xiangf
where Temcode = @kuanh
end else
if @px =3
。。。。。。。。。。。。。

fetch next from cr into @Px, @k, @S, @g ,@n , @x
end
commit tran
close cr
deallocate cr
eaglerxa 2008-06-23
  • 打赏
  • 举报
回复
大概如下:
begin tran
declare cr cursor for select px, k, s , g, n, x from #tt
open cr
fetch next from cr into @Px, @k, @S, @g ,@n , @x
while @@fetch_Status = 0
begin
if @px = 1
begin
update kuan
set fs1 = @stone ,
fs1 = @Guig,
fs1 = @Num,
fs1 = @xiangf
where Temcode = @kuanh
end else
if @px =2
begin
update kuan
set fs2e = @stone ,
fs2 = @Guig,
fs2 = @Num,
fs2 = @xiangf
where Temcode = @kuanh
end else
if @px =3
.......

fetch next from cr into @Px, @k, @S, @g ,@n , @x
end
commit tran
close cr
deallocate cr
eaglerxa 2008-06-23
  • 打赏
  • 举报
回复
大概如下:
begin tran
declare cr cursor for select px, k, s , g, n, x from #tt
open cr
fetch next from cr into @Px, @k, @S, @g ,@n , @x
while @@fetch_Status = 0
begin
if @px = 1
begin
update kuan
set fs1 = @stone ,
fs1 = @Guig,
fs1 = @Num,
fs1 = @xiangf
where Temcode = @kuanh
end else
if @px =2
begin
update kuan
set fs2e = @stone ,
fs2 = @Guig,
fs2 = @Num,
fs2 = @xiangf
where Temcode = @kuanh
end else
if @px =3
.......

fetch next from cr into @Px, @kuanh, @Stone, @guig,@num , @xiangf
end
commit tran
close cr
deallocate cr
wzy_love_sly 2008-06-23
  • 打赏
  • 举报
回复
case when不知道行不行,详细.
nzperfect 2008-06-23
  • 打赏
  • 举报
回复
这不好说,发语句吧.
ojuju10 2008-06-23
  • 打赏
  • 举报
回复

可以不用游标不?

批量更新!
nzperfect 2008-06-23
  • 打赏
  • 举报
回复
表kuan的Temcode加索引试试
create index idx_01 on kuan(Temcode)
一直以来把数据库的转换成Entity或DTO都是一件让人头痛的事情,既浪费时间又很繁琐,看着几十上百个的几百上千个字段,真是一件让人很头痛的事情。 我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不干净,配置非常繁琐等等问题。 于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的生成JavaBean的工具,支持MySQL、Oracle、SQLServce,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除前缀,并支持去除多个前缀,支持精确指定只生成哪几个的Bean,也支持模糊查找生成哪几个的Bean,现在不但成员变量上能生成备注了,而且在Getter和Setter上也能有备注了! 更重要的是所有的配置都能被保存到本地,只要配置过一次,下次使用只要点一下生成JavaBean,下一秒就能拿到你想要的JavaBean了,完全实现秒生成。 这次版本更新如下: 1、新增查看数据库中所有的对话框,在精确匹配文本框旁点击更多按钮或双击精确匹配文本框, 即可弹出选择数据库的对话框,这里将列出数据库中所有的,并支持模糊查询(不区分大小写) 查找需要的,在复选框中选中需要的,点确认选择即可。 2、解决Oracle一次转换的过多时出现超出打开游标的最大数异常,现在测试了一次生成四百多张 的DTO和Entity成功完成转换,只是太多速度有点。 3、内存占用优化,对占用的内存资源进行清理,极大的减少了程序对系统内存的占用,提高了程序的 运行效率和稳定性。

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧