用过SQLDirect的朋友请进!(20分)

  • 主题发起人 主题发起人 Flashcqxg
  • 开始时间 开始时间
F

Flashcqxg

Unregistered / Unconfirmed
GUEST, unregistred user!
我用SQLDirect来读取数据,速度本身非常快,但当想取得记录总数的时候就变得有点慢了。
具体是,当不用recordcount的时候,40000万条数据1秒就行了,但当用recordcount来取得记录集总数的时候,却用了12秒,多出来了11秒。
不知道是什么原因?
 
没有用 recordcount 时40000万条数据实际上并没有全部读到客户端,用 recordcount 时就必须全部读到客户端,所以操作时间长。
 
kaida
请问有没有办法解决呢?谢谢!
 
如果纯粹想知道数据表有多少条记录,可以用存储过程。但是我估计你是想遍历数据表,一次遍历几万条记录是不科学的。一般每次处理、访问的数据都可以限制在一定范围,用户不可能一次需要处理及万条数据。
把你的具体内容和要求写出来,再帮你想办法吧。
 
kaida:
谢谢您。其实这个问题也没有什么,我只是想知道原因而已,真是需要的话,可以用count(*)的办法来查询的。
其实我最想知道的是循环写数据问题,从一个表写到另外一个表(因为其它原因,只能用循环赋值写的办法)。当然,这个也很好办,关键的问题在于,我要写的数据量非常大,可能多的时候大概有50万条数据吧,循环写没有问题,只是确实太慢了,花太多的时间了,今天看了看多线程的资料,好象可以解决,但还是没有头绪。。。。。。
 
多线程不能解决速度问题,只是说你在进行遍历操作的同时可以进行其它操作,提高效率。
 
kaida:
我的意思是说多线程是不是可以同时进行?
假设我有100万条数据,我能不能同时建立10个线程,每个线程负责10万条数据,这10个线程同时 进行导入,那不就就只是花了1/10的时间了吗?
上述理解是否正确,还请多指点。
 
估计不行。首先应找出影响速度的瓶颈,如果是数据库问题,我想现在数据库都很先进,设计数据库时肯定已经考虑到用多线程提高速度,你再用多线程提速没有意义。如果是网速问题,只能通过改善硬件解决,用多线程只能充分利用带宽,而不可能解决网速的。
 
现在的问题在于循环写数据的问题。没有您所说的网速问题。这个问题我们可以假设是在一台机上的环境上。
while not query.eofdo
begin
query.append;
query.field('字段').value:=另外一个查询的值;
query.next;
end;

说直接一点,就是解决上面的一段代码循环的问题。现在的代码就只有这个循环,如果能将上面的一个循环分为10个同样的循环同时进行的话,速度是不是提高了10位呢?
 
多人接受答案了。
 
后退
顶部