| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1246 人关注过本帖
标题:【求助】怎样才能加快统计的速度?
取消只看楼主 加入收藏
mlpoo
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-6-25
结帖率:0
收藏
 问题点数:0 回复次数:2 
【求助】怎样才能加快统计的速度?
有一个上百万条记录的表dbf1,我编了个小程序用其中的几个字段值作为条件进行统计,得到相同字段值的记录数,再把统计结果输出到dbf2,然后把表dbf1中已经统计过的记录删除,再进行下一次统计,一直循环到表dbf1为空。不过感觉速度实在太慢,向论坛的各位求助,大家看看我的程序帮助分析一下,是不是我的思路错了?

sele 2
use dbf2                              &&记录统计结果的表
sele 1
use dbf1                              &&原始数据
do while bof()=.t.
        field1=a1                     &&取字段值作为统计条件
        field2=a2
        fieldn=an
        count for field1=a1 and field2=a2 and ……fieldn=an to aaa   &&得到统计结果
        sele2
        insert into dbf2(field1,field2,……fieldn,同条件记录数) values(a1,a2,……,an,aaa) &&把统计
                                                                                            条件和
                                                                                        结果写到dbf2

        sele 1
        dele for field1=a1 and field2=a2 and .……fieldn=an  &&删掉已有结果的记录,减小dbf1体积
        pack
enddo

大家帮我看看,有没有更好的办法?
P.S.为了便于大家理解,我用两个表说明:
假设dbf1存放的是需要统计的数据,当然记录的排列肯定没有下
面排列的那么整齐,字段数也不止这么少。
dbf1
field0 field1 field2 field3 field4 field5 field6 field7
    a    13    990    3        .t.    .t.    .f.  工人
    b    13    990    3        .t.    .t.    .f.  工人
    c    13    990    3        .t.    .t.    .f.  工人        ←未经统计的数据
    d    13    990    3        .t.    .t.    .f.  工人
    e    33    1200   5        .f.    .f.    .t.  技师
    f    33    1200   5        .f.    .f.    .t.  技师
    g    11    960    1        .t.    .t.    .t.  学徒
    h    11    960    1        .t.    .t.    .t.  学徒
    i    11    960    1        .t.    .t.    .t.  学徒
    j    11    960    1        .t.    .t.    .t.  学徒
    k    11    960    1        .t.    .t.    .t.  学徒
    l    43    1000   3        .t.    .f.    .t.  技师
    m    17    910    1        .t.    .t.    .f.  工人
    n    17    910    1        .t.    .t.    .f.  工人
dbf2存放统计的结果
dbf2
field1 field2 field3 field4 field5 field6 field7 同条件记录数
  13    990    3        .t.    .t.    .f.  工人    4
  33    1200   5        .f.    .f.    .t.  技师    2           ←我需要的结果
  11    960    1        .t.    .t.    .t.  学徒    5
  43    1000   3        .t.    .f.    .t.  技师    1
  17    910    1        .t.    .t.    .f.  工人    2
   

[ 本帖最后由 mlpoo 于 2009-9-16 21:52 编辑 ]
搜索更多相关主题的帖子: 统计 速度 
2009-09-16 16:25
mlpoo
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-6-25
收藏
得分:0 
茵梦湖感谢你的回复,不过你的代码似乎与我的要求有点出入。
我用两个表来说明:
假设dbf1存放的是需要统计的数据,当然记录的排列肯定没有下
面排列的那么整齐,字段数也不止这么少。
dbf1
field0 field1 field2 field3 field4 field5 field6 field7
    a    13    990    3        .t.    .t.    .f.  工人
    b    13    990    3        .t.    .t.    .f.  工人
    c    13    990    3        .t.    .t.    .f.  工人
    d    13    990    3        .t.    .t.    .f.  工人
    e    33    1200   5        .f.    .f.    .t.  技师
    f    33    1200   5        .f.    .f.    .t.  技师
    g    11    960    1        .t.    .t.    .t.  学徒
    h    11    960    1        .t.    .t.    .t.  学徒
    i    11    960    1        .t.    .t.    .t.  学徒
    j    11    960    1        .t.    .t.    .t.  学徒
    k    11    960    1        .t.    .t.    .t.  学徒
    l    43    1000   3        .t.    .f.    .t.  技师
    m    17    910    1        .t.    .t.    .f.  工人
    n    17    910    1        .t.    .t.    .f.  工人

dbf2存放统计的结果
dbf2
field1 field2 field3 field4 field5 field6 field7 同条件记录数
  13    990    3        .t.    .t.    .f.  工人    4
  33    1200   5        .f.    .f.    .t.  技师    2
  11    960    1        .t.    .t.    .t.  学徒    5
  43    1000   3        .t.    .f.    .t.  技师    1
  17    910    1        .t.    .t.    .f.  工人    2

[ 本帖最后由 mlpoo 于 2009-9-16 21:56 编辑 ]
2009-09-16 20:14
mlpoo
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-6-25
收藏
得分:0 
非常感谢以上各位的答复,我的问题已经得到解决了,使用select就搞定了,110多万记录的表用一台赛3+256内存的机子不到60秒就有结果了。
因为我的vfp是半吊子水平,肯定是写不出上面的那些语句的。
在这里还想向茵梦湖请教一下:
sele 1  
use dbf1                              &&原始数据
repl all 同条件记录数 with 1    ←这里是什么作用呢?‘同条件记录数’这个字段只存在于dbf2表中。
inde on field1+field2+...+fieldn to ls
tota on field1+field2+...+fieldn to dbf2 fiel 同条件记录数   
retu

水平有限,让你见笑了。
祝各位一切顺利。
2009-09-16 23:13
快速回复:【求助】怎样才能加快统计的速度?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045066 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved