ADO的效率慢慢降低,原因何在?高手请进!!!

hacker_lsw 2002-12-19 05:45:50

for......
1、ADOdataset1从数据库取数据(1000条取一次)
2、把ADOdataset1的数据付值给ADOdataset2(1000条付值一次)
3、提交ADOdataset2的数据(1000条提交一次)
继续下1000条

一共有100万条

开始的1000条快,后来越来越慢。到50万的时候,1000条要好久好久,好象死了一样!

请教问题出在什么地方??

能解决给300分,决不失言!
...全文
39 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hacker_lsw 2002-12-27
  • 打赏
  • 举报
回复
to INeedCa(缺钙) :
是的,我以前的做法是:一直累加到ADOdataset2中,没有清除。
现在的做法是:累加一段到1000条后,关闭,用我的WHERE语句再打开,
这样ADOdataset2中的数据量又为零了

不知道你有什么好办法,清除ADOdataset2中的数据呢?
INeedCa 2002-12-25
  • 打赏
  • 举报
回复
楼主,你的意思是说,ADOdataset2中的数据一直没有清除还是,ADOdataset2在获取元数据的时候从数据库中将所有的数据都拎过来了?
hacker_lsw 2002-12-24
  • 打赏
  • 举报
回复

解决办法:

各位可以继续讨论!
发言者有分!

本楼以上的兄弟全部到
http://expert.csdn.net/Expert/topic/1296/1296001.xml?temp=.8862421
取分,本贴继续讨论!

我现在用SQL语句select 出来的时候设WHERE 1<0 这样数据量一直都是0
基本解决我的问题!
hacker_lsw 2002-12-24
  • 打赏
  • 举报
回复
问题找到了!

不好意思,最近太忙!

问题出在post上!(采用updatebatch()方式)

同样的数据集,在内存中操作
如果数据量为零,插入一条数据,post用时7毫秒(没有写到数据库)
如果数据量为1000000,插入一条数据,post用时>1秒(没有写到数据库)

差别如此之大!

newyj(吴刚vs西西弗)的原理是对的!
hacker_lsw 2002-12-19
  • 打赏
  • 举报
回复
已经设为clUseServer了!

我个人认为是第2步的问题。

取数据和提交数据问题不大,就是从数据集1复制到数据集2的时候时间逐渐增长!

等我按newyj(吴刚vs西西弗)的方法测试过了,再看看问题是不是第2步!

zsy_good 2002-12-19
  • 打赏
  • 举报
回复
用Tadoquery
CursorLocation 改为 clUseServer
速度可以提高一倍
,我用几十万条测试过.数据越多越快
hacker_lsw 2002-12-19
  • 打赏
  • 举报
回复
我正有此打算!
newyj 2002-12-19
  • 打赏
  • 举报
回复
GetTickCount计一下时间,写个日志分析一下。
why101 2002-12-19
  • 打赏
  • 举报
回复
up
hacker_lsw 2002-12-19
  • 打赏
  • 举报
回复
多谢这么多兄弟来帮忙!

我跟踪了一下,问题出在第1步或第2步。

第3步没有问题,提交给数据库的时候,时间前后都一样!
yekehe 2002-12-19
  • 打赏
  • 举报
回复
同意楼上cut掉聚集索引
newyj 2002-12-19
  • 打赏
  • 举报
回复
主要看你的索引类型,比如你选用了聚集索引,插入了50万条以后,你插入一条但他的索引值最小,插入一条的时间可能就是你插入50万条的时间,虽然没有这么夸张但原理如此,你后面插入一条的时间是你前面的几倍几十倍。
你不建索引试试,或去调聚集索引
zwhhoo 2002-12-19
  • 打赏
  • 举报
回复
我也觉得是慢在数据库的取值上,越向后搜索的数据范围越大,所以越慢。
Billy_Chen28 2002-12-19
  • 打赏
  • 举报
回复
如有人能用ADO方式不变,并且还能解决楼主这个问题,我也给他100分
findcsdn 2002-12-19
  • 打赏
  • 举报
回复
ado是微软提供的组件,delphi只是封装了windows提供的许多接口。
如果前面的50万条数据处理都没有问题,我想ado是没有问题的。
有没有考虑过不是ado的问题,或者是数据库的问题呢?

hacker_lsw 2002-12-19
  • 打赏
  • 举报
回复
那用什么呀?
bigysw 2002-12-19
  • 打赏
  • 举报
回复
很悲哀的方法,就是不用ADO。呵呵
hacker_lsw 2002-12-19
  • 打赏
  • 举报
回复
能详细一点吗?

以前有什么解决办法,我也想试试!
bigysw 2002-12-19
  • 打赏
  • 举报
回复
这个问题有人问过多次,从来没有好的解答,普遍认为是delphi的内存管理不力。

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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