急救 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 会引起全表扫描吗,如何测试?