主题:请教如何seek到倒数第一条记录?
moz
[专家分:37620] 发布于 2007-05-23 03:04:00
有没有更好的方法?
i=0
seek ....
do while found()
i=reccno()
continue
enddo
if i>0 goto i
又或者
set filter
goto bottom
(没有视图能用吗?)
哪个更快点?有没有更方便更高效更快的办法?用SQL好像慢很多。
最后更新于:2007-12-15 09:47:00
回复列表 (共32个回复)
21 楼
乖兔 [专家分:140] 发布于 2007-06-01 21:12:00
select语句有一个去掉重复关键字值的参数DISTINCT,能不能用这个参数将同一名字的订单只保留最后日期的
22 楼
0901chang [专家分:10660] 发布于 2007-06-02 08:54:00
用 SELECT 加参数:
ORDER BY Order_Item [ASC | DESC]
选 DESC 降排序,得到一个降排序的集,搞店。
23 楼
moz [专家分:37620] 发布于 2007-06-02 13:52:00
那有何用?
还不是得全部过滤遍历一次?
24 楼
0901chang [专家分:10660] 发布于 2007-06-02 14:47:00
你建立索引之后,指定索引后select还要全部过虑吗,我没有实际用过select语句,但我想作vfp的人肯定比我聪明。
25 楼
moz [专家分:37620] 发布于 2007-06-02 21:25:00
1. 传说SQL会自动使用索引
(可能会有某些误区,我甚至怀疑它自动使用的索引是它使用时临时建的,
其实临时建索引并不会耗费多少时间,但毕竟会影响效率)
2. SQL的结果是一个集,不可避免的返回一个或多个记录集,
占用建集及处理集的时间,效率当然不可能比得上SEEK
3. 这里的疑问就是当同一个名字的记录很多时,无法自动比较时间而加快筛选时间.
26 楼
0901chang [专家分:10660] 发布于 2007-06-03 00:17:00
在对人员进行管理时,会有姓名相同的人,这种操作你当然不能用姓名做主索引。常用的解决方法是:系统给每个人分配一个标识号,这种操作以标识号做主索引。
建立索引后,既便记录很多,若在几百条以下,速度比seek慢不了多少,seek之后你也要copy whil 条件 to 临时表,浏览该人的全部记录才好判断,也是一个集,耗费的时间基本相同。
select用 whil 条件 形成 临时表时,我猜其速度应该与 copy whil 条件 to 临时表 基本相同。
建立的索引:
inde on 标识号+登记日期 tag 索引? DESCENDING && 标识号、登记日期都是字符型
27 楼
moz [专家分:37620] 发布于 2007-12-15 11:16:00
其实想来想去,复合索引的确算是比较合适的办法了,
但如果需求的字段太多的话,最后还是决定使用SQL语句方便些好了.
28 楼
moz [专家分:37620] 发布于 2008-09-12 02:55:00
现在的做法是:
D_date=date()-60
select ..... where 日期>D_date ......
if _tally=0
select ..... where ......
endif
if _tally>0
go bottom
endif
29 楼
cbl518 [专家分:57140] 发布于 2008-09-13 08:52:00
[quote]现在的做法是:
D_date=date()-60
select ..... where 日期>D_date ......
if _tally=0
select ..... where ......
endif
if _tally>0
go bottom
endif
[/quote]
这不是最佳方案,它没体现出 VFp 的神奇速度!
你相信在 100 万条记录中,按你得条件,能在 0.5 秒内完成(必须遍历全数据表)查询一条或若干条记录吗。
30 楼
liupeisong [专家分:2340] 发布于 2008-09-16 17:08:00
用SQL命令
select * top 2 from t1 where ... order by rq
然后简单处理一下就是了三
用SQL只要索引建好了不可能更慢的
注意使用TOP子句,可以控制只返回指定数目的记录
我来回复