Office中国论坛/Access中国论坛

标题: 怎么才能提高更新数据的速度 [打印本页]

作者: kent_73    时间: 2015-5-19 13:24
标题: 怎么才能提高更新数据的速度
   下面这段代码,在数据量比较大的情况下,更新太慢了,请问怎么才能提高更新速度,谢谢
    rs.Open "select * from Tb_sf_bdsf_temp", mydb, 3, 3
    For i = 1 To rs.Recordcount
        DoCmd.RunSQL "UPDATE t_perpiece_sj  set FsplitLine17='" & Format(Date, "yyyy-mm-dd") & "' where FproSpe='Shouf' and Fdept='DeptA' and FsplitLine17='0' and forderno='" & rs!Forderno & "' and Fstyle='" & rs!Fstyle & "' and format(fdate,'yyyy-mm-dd')<='" & Txtrq & "'"
    rs.MoveNext
    Next

作者: 盗梦    时间: 2015-5-19 13:34
里面用到Format函数,去掉,日期也是可以直接判断的
作者: kent_73    时间: 2015-5-19 13:36
盗梦 发表于 2015-5-19 13:34
里面用到Format函数,去掉,日期也是可以直接判断的

是format影响了更新速度吗?

由于需要更新的数据可能会比较多,能用其它方法提升下速度吗?
作者: tmtony    时间: 2015-5-19 14:10
另外为
FproSpe Fdept FsplitLine17 等 查询的字段在数据表中建立相应的索引
则速度会快很多
作者: kent_73    时间: 2015-5-19 14:14
tmtony 发表于 2015-5-19 14:10
另外为
FproSpe Fdept FsplitLine17 等 查询的字段在数据表中建立相应的索引
则速度会快很多

好的,谢谢,我试试
作者: leonshi    时间: 2015-5-19 14:18
后台用的是什么?如果是sql serve建议试试sql server 的视图或者存储过程
作者: kent_73    时间: 2015-5-19 14:25
leonshi 发表于 2015-5-19 14:18
后台用的是什么?如果是sql serve建议试试sql server 的视图或者存储过程

后台是sql server
作者: roych    时间: 2015-5-19 14:44
1、尽可能建立主键、索引和关系,勾选级联更新和删除。
——如果能够建立关系的话,直接建立更新查询比ADO是快一些的。毕竟ADO需要遍历每个记录。
2、如果没法做到第1点,那么请设置t_perpiece_sj表的主键(当然不能是“自动编号”,假定是字段A),创建一个临时表(设置与_perpiece_sj表相同的主键),把更新查询修改为追加查询,将相应的字段追加到该临时表,然后通过这个临时表和t_perpiece_sj链接进行更新。
3、如果没法做到这两点,那就只能做些微调了。例如,假设无需对记录集进行操作的话,尽可能使用只前的游标(adOpenForwardOnly,0)和只读的记录锁定类型(adLockReadOnly,1)。另外,注意到你的记录集只使用了2个字段。如果没什么必要的话,可以只选择这两个字段。没必要使用“*”
作者: kent_73    时间: 2015-5-19 15:05
roych 发表于 2015-5-19 14:44
1、尽可能建立主键、索引和关系,勾选级联更新和删除。
——如果能够建立关系的话,直接建立更新查询比ADO ...

非常感谢,马上就检查并更改
作者: zpy2    时间: 2015-5-19 15:33
不要用循环,这应是个基本原则吧。
作者: zpy2    时间: 2015-5-19 15:44
kent_73 发表于 2015-5-19 14:25
后台是sql server

如果是sql serve建议试试sql server 的视图或者存储过程




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3