3万多记录的排序速度,请指教(100分)

  • 主题发起人 主题发起人 flyat
  • 开始时间 开始时间
F

flyat

Unregistered / Unconfirmed
GUEST, unregistred user!
一个3万多记录21M大的Paradox表,(排序字段已创建索引,不可为主键).
说小不小,说大不大。
用TQuery打开时要花上3个半分钟(order by 子句,只用一个字段)

这该怎样忍受呀?
 
3分钟多,怎样解决,帮帮忙
 
不应该!
可否考虑每次只检索所需要的记录而不是全部,即带WHERE条件?
 
条件过滤可能快点,但这样的结果实在太慢,
请问TQuery的Sql order子句是否有利用索引?
 
一、花那么长时间证明你的机器有问题。
二、可使用ClientDataSet的内存排序建立索引(Query<-DataSetProvider<-ClientDataSet).
 
我在以上说的不是过滤!
WHERE 条件查询和FILTER是完全不同的效率!
我从不在客户端排序!
在服务器端排序会用到索引,提高效率!
 
也许我不能把WHERE说成过滤,那么叫条件查询吧。但怎么叫也许不重要,
不用任何条件返回整个结果集只用了一刹那时间;用WHERE虽然返回的结
果集小了多,却远不比无条件的速度,但对处理结果的速度就有好处。
而order的结果比历遍整个表还慢。
只要不用order,我的机器还算可以,机器可能没有问题。
只求合理的速度,是不是要动用ClientDataSet来解决?
 
索引字段中是不是有NULL值?
 
使用本地的桌面数据库时,用table 要比query快的,
而用大型数据库尤其是c/s时用query则要快的多,建议用table的filter吧
 
换一换数据引擎吧!不断尝试新生事物才是新新人类的本色。试一试 FlashFiler 2 ,可能
你不会再为查询速度苦恼。
 
先谢谢楼上两位的建议,但我查不到有人提出这样离奇的问题,其中可能有些什么!
所以我还没打算更改计划,其工作量也太大了。

其实我是用大富翁离线数据包一 delphibbs.mdb转为delphibbs.db测试的,
把ID设为主键,UserFrom字段索引。
虽然我的机器很老,但select * form delphibbs 第一次Open用2秒,关闭再
Open就没感觉了。
select * from delphibbs order by UserFrom ?我就喜欢老掉牙的机器测试。
如有兴趣的朋友不妨试试,测下order by的效率。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部