救命啊 !速度问题,谁能解决,必定高分送上(先送100不够再加UP者有分) (100分)

A

aidren

Unregistered / Unconfirmed
GUEST, unregistred user!
用delphi6.0+vfp开发一个仓库管理,采购库记录10万多条,库存库记录4万多条。
进行查询的时候速度奇慢,本地查询有时要3到5分钟,网络查询的话更慢有时候达到10分钟,
有没有什么好的方法可以提高查询速度的呢?


各位高手请帮帮忙,,小弟必定高分回送。
 
像你这样,不可能全部的数据都要显示,你可以根据需要的取出来,采用分页显示
 
看来只有加索引了,不过你的数据量这么大,有索引的话添加记录就会很慢
 
说详细一点,比如你用了那些数据库控件
连接方式使用bde还是其他方式等等
速度慢有很多原因,不能笼而统之的
另外不建议用dbf做网络数据库....
 
to smallmoneybags, huddle, 问题是我不能修改数据库(是结合客户原有系统的)。
to sung_001 是用ADO连接的 同时客户用的是win98,win98好像不怎么支持ADO的吧。
现在想不修改他的库结构而把速度提高一个等级。

有何方法?
 
VFP支持Rushmore,查下有关的帮助,进行相应的语句优化,应该达到很快的速度。10万
条记录小case!
 
我有个方法,但是有点笨,库管我从来没做过,但是应该有个比较常用的字段吧,
比如说是“零件名称”,它可能很长,在网络上查询的话因流量大当然会慢,那
就在库里多加上一个字段,添加记录的时候多加个字段,让用户看不见,方便程序
进行查询。零件名称 日期 价格 用户 First_P
电机AAAA 00-00-00 1200 XXX 电
电机BBBB 02-00-22 1500 XXX 电
集线器XXX 09-88-22 300 XX 集
...........................
那么多加的字段就是零件名称的第一个字,查询的时候先判断用户要查的内容的第一个
字,然后用First_P生成视图,在VIEW中再查询的话应该不会再很慢了,当然这个视图里
不包含零件名称这个字段,可能用两个字段就行了,一个FIRST_p,一个INDEX。
在单机上这个方法可能没有太大的提高,但是在网络上应该很明显,一点想法,
请指教:)
先做个小程序,让原来的库里多个字段,行吗?不行再说

 
xiaocai:vfp似乎不支持视图的
可以试一下改用bde,bde速度上很有优势的
另外有索引的话,添加数据也不像xiaocai说的这么夸张,我们原来也用vfp,二百多万条记录
有4个复合索引,添加数据也还可以。
 
那就不生成视图也可以呀,来一个嵌套查询也可以呀query1,query2
with query1 do
begin
close;
sql.clear;
sql.add('select index from table where first_p=:p1');
parambyname('p1').asstring:=copy(edit1.text,1,2);
prepare;
open;
while not query1.eof do
with query2 do
begin
close;
sql.clear;
sql.add('select * from table where index=:p2');
parambyname('p2').asstring:=query1.fieldbyname('index').asstring;
prepare;
open;
数据来了!
close;
unprepare;
end;
close;
unprepare;
end;
 
to xiaocai 我们不能修改库结构的。客户提供了数据库。客户的表建得不是很规范,比如查询一条
数据要在几个表中查找,比日采购的时候要从采购库+库存库+零件属性库+客户资料库

这些库的记录都是上万条的。这样一查,就可以一边看报纸一边在等了。
 
huddle; Vfp 支持視圖,而且支持的很好.你看看早期的 vfp 小型網絡程序,好多都是用vfp
的 romote 視圖 實現的.我倒是認為後來的好多小型數據庫是偷了vfp 的技術.(個人愈見).

aidren, 如果你是單純的 Select 數據到 客戶端的 Dbgrid 的話,試試 vfp 是否支持
Select top n from TbName 的語法.這樣速度可能回有所改善.還有,建議你的客戶優化一下
數據庫可能有好處.採用 Rushmore 技術,加 Index 都不會影響先前的程序的運行的.這樣也
可提高工作效率嘛.
 
这么多记录,没有索引,还要关联,速度可想而知
 
天啊,,应该是客户的机器有问题。
我在自己的机上测试的时候一个单号24条记录现在已经优化到18秒了。
客户测试的时候还是要几分钟。
 
怎么没有这方面的高手吗?
 
给分了。
 
换数据库吧!
 
机器快慢当然也有区别,做文件型数据库内存大小很关键
 
首先是必须建立索引,那样速度会快上好几倍
 
引别的 人一句话.

VFP 是最快的桌面数据库,

你可以还是用 VFP 开发这个程序 . 建好 索引, 10 万也没有问题. ( 记得有 测试 的)

还有. 如你一定要用 Delphi , 希望 你可以 考虑 用 BDE 引Qing , 一定会比 ADO快

很多.

希望 你可以试试. ,

等 你的 好 消息 .
 
多人接受答案了。
 
顶部