数据量大后SQL语句执行不了的问题.

cxmdcn 2007-09-21 02:15:51
我是把另一张表 Standarddata (这张表中也有个字段叫 Scode) 中的查询结果放置到 Extenddata.oldscode 中.
查询条件是
select scode from Standarddata where Standardrelated like '% Extenddata.Scode %'

有朋友帮我写了一个方法:
create function f_str(@row1 varchar(100))
returns varchar(1000) as
begin
declare @str varchar(1000)
set @str=''
select @str=@str+','+scode from Standarddata where Standardrelated like '%'+@row1+'%'
set @str=stuff(@str,1,1,'')
return @str
end
---------------
update Extenddata set oldscode=dbo.f_str(Scode)


我在少量数量下执行这个方法没有问题,但我的数据量比较大,Extenddata中有四千多条数据. Standarddata中有一万三千条数据.执行了十分钟也没有停止,数据也没有UPDATE过去

大家还有其他好的办法吗?

谢谢了!!
...全文
297 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dj2002zjsj 2007-09-21
  • 打赏
  • 举报
回复
1.不要用like
2.建索引
3. where后的条件字段改成varchar类型,不然会整个字段长度匹配
brother2605 2007-09-21
  • 打赏
  • 举报
回复
lz结贴的速度还是蛮快的哦
brother2605 2007-09-21
  • 打赏
  • 举报
回复
请教一下,如何在MSSQL上建全文索引?
-------------------------------------------
全文索引要在你当前数据库级别上建立,查看数据库 Properties--Files,
选中: using full-text indexing
cxmdcn 2007-09-21
  • 打赏
  • 举报
回复
哈~~ 分段处理 加个ID号
update Extenddata set oldscode=dbo.f_str(Scode) where id>1000 and id<2001
分几步就能执行了。
brother2605 2007-09-21
  • 打赏
  • 举报
回复
是啊,数据量太大了.
还有什么好的处理办法吗? 游标能解决吗?
----------------------------------------------
使用游标只会更慢。
其实我觉得你的处理方法已经比较好了,不知道这里面是否还有其他的逻辑。
现在在你的脚本上可以做的提升就是把“ where Standardrelated like '%'+@row1+'%'”
改成 where charindex(@row1,Standardrelated)>0
一般情况%...%匹配的效率会低于charindex.如果你的逻辑允许....%匹配,速度将会提升不少。
cxmdcn 2007-09-21
  • 打赏
  • 举报
回复
to QZY2003(剑客飘红)
请教一下,如何在MSSQL上建全文索引?
QZY2003 2007-09-21
  • 打赏
  • 举报
回复
建议用CONTAINS(,)来代替like 看是否快一点。
cxmdcn 2007-09-21
  • 打赏
  • 举报
回复
我把问题再描述清楚一点:

有一张表 Extenddata (Scode varchar(100),oldscode varchar(1000))

我是把另一张表 Standarddata (这张表中也有个字段叫 Scode) 中的查询结果集以逗号分隔开放置到 Extenddata.oldscode 中.
查询条件是
select scode from Standarddata where Standardrelated like '% Extenddata.Scode %'


有朋友帮我写了一个方法:
create function f_str(@row1 varchar(100))
returns varchar(1000) as
begin
declare @str varchar(1000)
set @str=''
select @str=@str+','+scode from Standarddata where Standardrelated like '%'+@row1+'%'
set @str=stuff(@str,1,1,'')
return @str
end
---------------
update Extenddata set oldscode=dbo.f_str(Scode)
wgzaaa 2007-09-21
  • 打赏
  • 举报
回复
那天下班了,将 Standardrelated like '%'+@row1+'%'
改成 charindex(@row1,Standardrelated )>0 效率会提高点,可能还是不解决根本问题
honey52570 2007-09-21
  • 打赏
  • 举报
回复
mark
cxmdcn 2007-09-21
  • 打赏
  • 举报
回复
是啊,数据量太大了.
还有什么好的处理办法吗? 游标能解决吗?
dobear_0922 2007-09-21
  • 打赏
  • 举报
回复
一万多条数据应该不算多, 最好把你的表结构和结果贴出来~

---------
他这个是循环,13000*4000=5200,0000
五千多万次,
leo_lesley 2007-09-21
  • 打赏
  • 举报
回复
一万多条数据应该不算多, 最好把你的表结构和结果贴出来~

22,300

社区成员

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

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