标题:局域网共享环境,count 命令执行时间很长
只看楼主
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
首先你要搞清楚是加载结果数据显示慢,还是统计过程慢。原因的可能性有许多,要逐个隔离分析和排查。

[ 本帖最后由 TonyDeng 于 2014-8-22 10:31 编辑 ]

授人以渔,不授人以鱼。
2014-08-22 10:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
先在本地count一次看执行时间多少,不要显示数据。

授人以渔,不授人以鱼。
2014-08-22 10:30
bccn201304
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:56
专家分:154
注 册:2013-4-21
得分:0 
试试这样
SELE ('sfsjdata')
SET ORDER TO sfcbq
IF SEEK(YYsfcbq)
    COUNT REST to recnoall WHILE sfcbq=YYsfcbq
    thisform.text3.value=recnoall
ENDIF
2014-08-22 10:32
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
SELE ('sfsjdata')
SET ORDER TO sfcbq
如果sfcbq字段是索引键
可先 seek YYsfcbq
再 do while sfcbq=YYsfcbq 循环体内统计,这样就不用扫描好多记录。
2014-08-22 10:36
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
得分:0 
劝楼主另开蹊径。如果只抓住这一张表的范围,只在一张 dbf表上做文章,恐怕真正彻底解决的好办法可能不存在吧。(个人意见)。这是由单张 dbf 大容量的性质所决定的。实际上,不管对这张表怎样的想办法,都改变不了巨量单表变慢的属性。日子还长着呢,必须要想出长久之法才行。否则,可别使程序就此而止。办法有2个,(1)分表。具体如何分,看个人需要。如果按时间段分,当按时间段查询时,很多分表就根本不用访问,大大提高速度。再就是,查询若干个分表,比查询一个整体大表也快得多。(2)假如能把此大表放在 SQL SERVER 中。(4楼意见),可能会解决根本问题。因为此表变成了一个可膨胀的,带有搜索引擎的,使用时间戳的,有堆栈数据集的,端口访问的表。动用了微软的尖端技术。vfp 与 server 2014, 目前仍然是无缝连接。使用的容易程度和使用DBC没多大的两样。

2014-08-22 23:01
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:649
专家分:2156
注 册:2014-2-7
得分:0 
以下是引用zyqm00在2014-8-22 09:36:47的发言:

SELE ('sfsjdata')
SET ORDER TO sfcbq
count to recnoall FOR sfcbq=YYsfcbq
thisform.text3.value=recnoall
GO TOP
IF !EOF()
   thisform.text2.value=RECN()
ENDI
thisform.mygrid1.refresh
thisform.mygrid1.setfocus()
 
这是代码,如何优化,调试发现 count to recnoall FOR sfcbq=YYsfcbq 执行很长时间
楼主虽然打开了表索引,但表索引却没有起到任何作用。对于海量数据使用索引是必须的,代码优化如下:
程序代码:
SELE sfsjdata        && 对于字符常量使用名称表达式,本身就是“画蛇添足”
SET ORDER TO sfcbq
seek yysfcbq         && 定位到满足条件的首记录
count rest to recnoall while sfcbq = YYsfcbq    && 统计满足条件的记录数,注意这里的条件是“WHILE”
thisform.text3.value=recnoall
GO TOP
IF !EOF()
   thisform.text2.value=RECN()
ENDI
thisform.mygrid1.refresh
thisform.mygrid1.setfocus() 


泉城飞狐
2014-08-25 10:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-435223-1-1.html




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

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