| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1502 人关注过本帖
标题:SQL-SELECT命令与OCCURS()函数查询时间对比的探讨
取消只看楼主 加入收藏
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
结帖率:88.24%
收藏
已结贴  问题点数:100 回复次数:5 
SQL-SELECT命令与OCCURS()函数查询时间对比的探讨
SJ.rar (13.82 KB)

现有一数据表(见附件),字段A、B、C、D、E、F中的记录是01-33共33个数据中的其中任意6个数据。
要求:统计出字段A、B、C、D、E、F中的所有记录01-33每个数据出现的次数
方法:SQL-SELECT命令与OCCURS()函数两种方法,最后得出每种方法的查询时间。
搜索更多相关主题的帖子: 数据表 记录 统计 
2014-03-23 23:15
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
记录超过1000条时,OCCURS()的查询时间明显高于SQL-SELECT命令,看大家是不是都这样。

坚守VFP最后的阵地
2014-03-23 23:58
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
SQL 0.008
OCCURS() 0.032
误差不了多少
这个与代码的优化,电脑的配置有很大的关系
上次我也是用OCCURS(),外加SCAN ENDSCAN 统计1000条记录数据,字段是7个,用时5秒左右
后来一个高手帮我用SQL写了段代码,查询时间不到1秒。


[ 本帖最后由 sdta 于 2014-3-24 01:10 编辑 ]

坚守VFP最后的阵地
2014-03-24 00:13
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
5楼代码说的问题,帖子地址:http://bbs.
*-----------------------------------------------------------------------
*-SQL命令-*
T1=SECONDS()
SELECT A,COUNT(*) 次数 FROM (SELECT A FROM SJ ;
UNION ALL SELECT B FROM SJ ;
UNION ALL SELECT C FROM SJ ;
UNION ALL SELECT D FROM SJ ;
UNION ALL SELECT E FROM SJ ;
UNION ALL SELECT F FROM SJ) A GROUP BY 1 ORDER BY 2 INTO CURSOR TMP
*------这段代码是后加的------------------------------------------
GO BOTTOM
CS=次数
SELECT DISTINCT 次数,SPACE(250) 值 FROM TMP ORDER BY 1 INTO CURSOR TMP1 READWRITE
SELECT TMP
SCAN
   REPLACE  值 WITH ALLTRIM(值)+IIF(NOT EMPTY(值),[ ],[])+TMP.A FOR TMP1.次数=TMP.次数 IN TMP1
ENDSCAN
*- END
MESSAGEBOX([SQL命令运行时间:]+TRANSFORM(SECONDS()-T1)+[秒])

*-OCCURS()函数-*
CLEAR
T1=SECONDS()
SELECT A+[,]+B+[,]+C+[,]+D+[,]+E+[,]+F A FROM SJ INTO CURSOR TMP1

LOCAL LC,LNS,LCMA,LASTR[CS]
STORE [] TO LC,LASTR
SCAN
   LC=LC+A+IIF(RECNO()<RECCOUNT(),[,],[])
ENDSCAN
FOR LNI=1 TO 33
    LCMA=PADL(LNI,2,[0])
    LNS=OCCURS(LCMA,LC)
    LASTR[LNS]=LASTR[LNS]+LCMA+[ ]
ENDFOR

FOR LNI=1 TO CS
    IF NOT EMPTY(LASTR[LNI])
       ?[〖]+PADL(LNI,3)+[〗次的号码:]+LASTR[LNI]
    ENDIF
ENDFOR
MESSAGEBOX([OCCURS()函数运行时间:]+TRANSFORM(SECONDS()-T1)+[秒])



[ 本帖最后由 sdta 于 2014-3-24 01:05 编辑 ]

坚守VFP最后的阵地
2014-03-24 00:56
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
扫描命令(scan endscan)还是比较耗时的

坚守VFP最后的阵地
2014-03-24 01:04
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 4楼 TonyDeng
http://www. 有兴趣可以看看

坚守VFP最后的阵地
2014-03-24 01:25
快速回复:SQL-SELECT命令与OCCURS()函数查询时间对比的探讨
数据加载中...
 
   



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

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