快速读取大量记录(100分)

  • 主题发起人 主题发起人 txbdir
  • 开始时间 开始时间
T

txbdir

Unregistered / Unconfirmed
GUEST, unregistred user!
请问一下,如果我在服务器上有几十万条记录,如何能快速地读取出来呢?我试过SQL查询分析器都能很快的读出来,而我们作的系统却超时,我们系统使用的是三层数据结构!
 
咋没人顶呢?自己顶一下!
 
你不应该一次把全部数据都读回来吧,如果你分页读取数据和现实,肯定不会超时 ,而且,给用户的感觉是速度很快。
 
你这个快速叫法不太对...数据库这东西我没感觉他快过..<br>你读一部分资料或一半资料出来,会不会超时呢?多做下测试<br>我也同意楼上的...
 
我在查询分析器里查询记录8万多条,5秒钟就读出来了,但我们那个应用程序却超时!如果选择很少的记录,则几秒钟就查询出来了,我想应该是从服务端拿到客户端来时慢了!
 
你把数据库做好索引,效果很大,去查阅一下相关资料
 
查询分析器不是一次把数据都显示给你吧,
 
本来就没有远程取几十万记录的做法,这个想快只有提高硬件和网络的档次,不知道1000M的网络行不?
 
查询分析器不是一次读出来的?应该是吧!因为它的速度很快啊,大约五秒钟就能查询出来,而我们那个系统却超时,我想与数据库查询无关吧,最主要是从服务器读数据到客户端,这才是最主要的!我知道要查询几万条记录一般都很少!但公司需求要那么做,所以只有在网上请教一下了!
 
你可以有两个选择。把超时时间加大,说不定需要设置成几分钟。或者使用分页显示的方式。这样也是回来也可以是几万记录,但是只是显示当前用户选择显示的东西。
 
谢谢,我使用的是TSocketConnection,但不知道在哪儿设置超时,请问一下,在哪儿设置呢?
 
我的天,三层还这样搞。<br>其实,应该是游标的类型错了,你应该是用ADO吧
 
服务端连接数据库是用的ADO!在SQL查询分析器里查询都不慢,好像应该是从服务端拿数据到客户端慢!
 
你把你读取数据的代码写一个小的测试程序,放在服务器上,直接连接数据库(不要通过三层结构连接),看一下查询的速度,如果还是很慢,那说明是你的代码或者没有数据库优化.<br>如果很快,那说明是三层结构的问题,就是你说的“从服务端拿数据到客户端慢!”
 
谢了,应该是三层结构问题!
 
这不是结构的问题,这是所有系统都存在的问题.这种情况,最好在后台下功夫.<br>最简单的方式:<br>&nbsp; &nbsp; 1.程序中传参数(减少硬编码的延时)<br>&nbsp; &nbsp; 2.建索引(但索增加,删除时维护索引影响比较大,也就是速度上).<br>复杂一点的,在数据库级别下功夫:<br>&nbsp; &nbsp; 1.分布式RAC处理.<br>&nbsp; &nbsp; 2.建分区表(可以是按时间,记录数,哈希)<br>&nbsp; &nbsp; 3.如果是ORACLE的话,提高SGA对性能提升很大,不过需要你内存足够大.适当的提高共享池的大小.<br>&nbsp; &nbsp; 4.考虑你的数据库是OLAP类型还是OLTP类型.做适当的配置.
 
查询分析器用了5秒钟不过是在服务进程内准备好了数据,并通过Pipe向企业管理器传来<br>了第一页数据罢了,而不是全部传递完毕。不信的话,你用Ctrl+End定位到这8万行中的最<br>后一条,看看是不是瞬间到底。<br>&nbsp; 在标准的两层架构中,Delphi使用了一些技巧减少每次传递的数据行数,比三层快正常。<br>不过,还是考虑优化一下应用本身的逻辑吧——一次完整的取8万行数据本身就有点问题。
 
服务端读取数据需要花费时间,把读取出来的数据通过provider打包为clientdataset可以接收的数据格式,又需要花费时间,clientdataset解析该数据包又需要时间。<br>测试一下下面的代码,如果下面的代码运行时间比较长,那你就别在这个问题上多考虑了。<br>query1.close;<br>query1.sql.text:= 'select * from 表1';<br>query1.open;<br>Provider1.dataset := query1;<br>ClientDataSet1.Data := Provider1.Data ; &nbsp;//跟踪一下本行需要的时间
 
多谢各位讲解!
 
后退
顶部