主题:运行速度慢
pupil
[专家分:0] 发布于 2008-05-12 23:15:00
敬请各位老师指教:
我用VFP9编了一个统计程序,共有1600张自由表,每张表有18个字段,用于存储销售数据,字符字段一般为20位,数字大多小于10位。刚开始用时转入一天的数据(从EXCEL报表中)并作一些统计,只需3~4分钟就完成了;但现在保存了有80天的记录后,速度就很慢,需要25分钟才能完成数据转入和统计。真是太慢了,不能忍受。能否优化?
我没用CONFIG。FPW文件,都是用的默认值,是否用BUFFER,FILES设置可以优化?
回复列表 (共10个回复)
沙发
lwh1188 [专家分:25840] 发布于 2008-05-13 08:20:00
问题出在“...转入一天的数据(从EXCEL报表中)并作一些统计...”是如何转的,即转换的方法是如何的?
板凳
pupil [专家分:0] 发布于 2008-05-13 22:13:00
谢谢一楼的支持!
原始数据分两个市场是放在两张EXCEL表中的,一张有1000个记录,一张600个记录;每个记录是一个销售点的数据,用一张表从EXCEL中读入数据(APPEND FROM data type xls),再将每一条记录转入相应销售点数据记录表中,并做相关统计。
3 楼
lwh1188 [专家分:25840] 发布于 2008-05-14 11:41:00
如果一些表的绝大部分字段相同,最好合并成一表处理,多表的打开与关闭也占用时间和分配的工作区。为了某种数据的区分,可增加用于区分的字段,处理时把这个字段作为首要条件,你的自由表有1600个,可能是流程不够理想!
4 楼
pupil [专家分:0] 发布于 2008-05-14 21:49:00
谢谢3楼老师的支持!
我是这样考虑的,一个销售点的数据存在一张表里,一共有1600个销售点,则需1600张表,每个表共18个字段,都是记录销售情况必不可少的,其中仅4个字段是由其它基本字段计算出来的,这是以后最常用的查询数据,为方便以后查询用故予以保存。
如果将1600个表合并成一个表,数据多了,可能就有麻烦,现在保存了95天数据,这些表共有140M,所以考虑再三,按各个点一张表保存数据。
5 楼
zhaoyufei [专家分:550] 发布于 2008-05-17 18:34:00
纯数据不应该有140M,是否有通用型字段?
6 楼
pupil [专家分:0] 发布于 2008-05-18 16:44:00
谢谢五楼专家的支持!!
应该是文件大小:48。2M,占用空间140M。
没有通用字段,也没有备注字段
7 楼
alpen [专家分:1140] 发布于 2008-05-21 21:02:00
'原始数据分两个市场是放在两张EXCEL表中的,一张有1000个记录,一张600个记录;每个记录是一个销售点的数据,用一张表从EXCEL中读入数据(APPEND FROM data type xls),再将每一条记录转入相应销售点数据记录表中,并做相关统计。'
我看了上面的操作要点,认为既然数据结构多是一样的,那没必要去执行'将每一条记录转入相应销售点数据记录表中'的操作,完全可以放在一个数据表中,建立销售点等关键字段的索引,或建立销售点等关键字段的视图,然后用sql语句查询就是了.
8 楼
lwh1188 [专家分:25840] 发布于 2008-05-21 21:49:00
“一共有1600个销售点”应该是用结构相同的表,只要有“店编号、管理人、日期时间...”等可以区别各销售点的字段即可!如“店编号”可以象“车牌”一样,前面一个汉字,后加3个数字就足够了!
你说的“如果将1600个表合并成一个表,数据多了,可能就有麻烦”,不会麻烦,可用“日期、店编号、管理人、”等作条件取出数据,然后再“计算、汇总”等等!“历史数据”其实就是“流水帐”,从一个表中取部分数据远远快于多个表取“同量”的数据。
你可做个“流水表、日流水表、月流水表”,每日取集数据时,当‘完成’“日流水表”后,将“日流水表”“日期”是“当日”的记录追加到“流水表”和“月流水表”,每天可先清空“日流水表”才取集新一天的数据。每月的统计、汇总等等只用“月流水表”即可。同理,每月的统计、汇总前“删除”不是“本月的记录”即可(日期为条件嘛),其他的“查询、统计、汇总...”等等从“流水表”中“按条件取数据”到临时表再操作即可,尽量快和尽量少直接操作“流水表”有利于“保护”“流水表”,因“流水表”的记录是最“源”始的,是根本性的!打开表的时间长了一旦断电可能会掉失数据或破坏表!
9 楼
pupil [专家分:0] 发布于 2008-05-22 10:56:00
谢谢二位老师的指点!
我当初考虑将各个销售点的数据各自单独保存为一张表,就是考虑到,如放在一张表,太大了。其量要这样考虑!
1600个销售点,一天就是1600个记录,一年360天,就是576000条记录,二年则是不是1152000条记录,5、6年该是多少?而且,每月销售点还在增加,一年要增加几百,因此数据量非常庞大,不敢放在一张表中。
各自保存为一张,只要需要横向比较时才需要从各张表自提取数据,考虑这个麻烦,我将最可能用到的指标(横向比较)计算出来保存在每张表中,这样平常查询,一般是对有需要的销售点(表)查询,不用打开所有的表。
10 楼
lbscyb [专家分:4780] 发布于 2008-05-26 00:00:00
1600个销售点,一天就是1600个记录,一年360天,就是576000条记录,二年则是不是1152000条记录,5、6年该是多少?而且,每月销售点还在增加,一年要增加几百,因此数据量非常庞大,不敢放在一张表中。
----------------------------------------------------------------------------------------
你一年一个数据库不就解决了!
如果数据量特别大就别用VFP,用SQL SERVER !
我来回复