原生ADOQuery连ORACLE,大量数据查询速度很慢,请高手帮忙,谢谢。。。。(100分)

  • 主题发起人 主题发起人 sdtrm
  • 开始时间 开始时间
S

sdtrm

Unregistered / Unconfirmed
GUEST, unregistred user!
RT<br>我是ADOConnection连ADOQuery连DataSource连DBGrid;<br>连的是ORACLE数据库<br>ADOConnection驱动是用<br>Provider=OraOLEDB.Oracle.1;Password=user;Persist Security Info=True;User ID=user;Data Source=vehicle<br><br>ADOQuery属性我试过<br>CacheSize = 1000<br>CursorLocation = clUseClient<br>CursorType = ctStatic<br>LockType = ltOptimistic<br>MarshalOptions = moMarshalAll<br>但,当我扫描一个视图时,<br>select * from view_table;<br>大概有几十万条记录,没有图片等数据,需要时间很长,请问怎么能缩短时间?谢谢 。。。。。
 
对大数据量没必要一次全查出来,窗口也显示不完那么多记录,最好采用分页,不然系统会被拖死的,
 
存储过程分页速度很快地。
 
1、对表进行一些处理,比如增加索引;<br>2、不要Select * ....,把需要查询的字段写出来,不要偷懒;<br>3、查询语句最好能够加上条件以缩小范围
 
谢谢各位朋友的回答。<br>1、存储过程分页具体怎么做,麻烦请回答一下?(存储过程怎么写及用delphi控件属性设置及调用方法等)<br>2、嗯,我已经加了索引了,并且会将要查询的字段写出来。但还是感觉慢了点。<br>3、查询条件加上范围,但每天要的生大概20W笔记录,user就是查两天的,也有近四十W笔记录,所以这个记录数肯定就是很大了。
 
CacheSize = 1<br>CursorLocation = clUseServer<br>CursorType = ctOpenForwardOnly<br>LockType = ltReadOnly<br><br>ADO改成这样的属性,然后接上ClientDataset,ClientDataset的PacketRecords设为100-1000,一页一页的取,速度会快很多!
 
接受答案...3Q
 
后退
顶部