当前位置:数据库 > SQLServer >>

急救 MSSQL update 更新非常慢,请高人指点!

我想在以前评论的表上,加上楼号这个字段,所以我用ASP写了一个将所有评论的记录中的楼号字段更新,但我发现运行速度超慢,点评记录只有19W,应该不是很多 代码如下: i=0 set rs=server.createobject("adodb.recordset") if id="" then sql="select top 1 id from 新闻 order by id asc" else sql="select top 1 id from 新闻 where id>"&id&" order by id asc" end if rs.open sql,conn,1,1 do while not rs.eof i=i+1 bb=0 set rs2=server.createobject("adodb.recordset") sql="select id from 评论 where 新闻id="&rs("id")&" order by id asc" rs2.open sql,conn,1,1 do while not rs2.eof bb=bb+1 sql="update 评论 set 楼号="&bb&" where id="&rs2("id") conn_gtp.execute sql rs2.movenext loop rs2.close set rs2=nothing response.write "<script> fins.innerHTML=""已更新文章ID:"&rs("id")&"的评论"&i&""";</script> "
答案:你这样弄肯定慢,先取回一个记录集,再用用指针一行行扫描,再返回数据库查询,查询的结果还要返回客户端,客户端再根据情况进行UPDATE操作。19W的记录表,你这样来回传了3次,还取了个大数据集到客户端操作。

把你的需要做的操作说清楚;看你的说法,我理解为你在数据表里新建了一个字段,然后想把楼号的记录全补上吧。
把你的表结构给一个出来,包括主键(ID应该就是主键吧,是不是自动增长型),新闻ID字段(感觉你这个新闻ID好象是ID的外键)的意义,我把查询给你写出来

如果满足我上面说的,用这个查询看看是不是你要的结果
SELECT Id, 新闻ID ,楼号=(select count(*) from tablename a where a.新闻ID=b.新闻ID and a.id<=b.id) 
FROM tablename b
可以加个order by 新闻ID,楼号看看

如果是的话 直接用下面的update语句一次搞定
update tablename set 楼号=n.LH
from tablename as c ,
(SELECT Id, 新闻ID ,LH=(select count(*) from tablename a where a.新闻ID=b.新闻ID and a.id<=b.id) 
FROM tablename b) as n 
where c.id=n.id

上一个:MSSQL 触发器
下一个:mssql 中 主键用in 会引起全表扫描吗,如何测试?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,