在三层结构中,如何正确使用ClientDataSet.Findkey来提高查询效率(200分)

  • 主题发起人 jane2001
  • 开始时间
J

jane2001

Unregistered / Unconfirmed
GUEST, unregistred user!
本人最近开发的一套系统,数据库使用Sql Server7.0,前台使用Delphi5
结合Corbar技术,设计为三层结构体系。在一些地方为了提高速度,我将
ClientDataSet.Locate改为ClientDataSet.FindKey时,发现了几个奇怪的
现象,请各位高人指点迷津。
1.在以往使用的Table中,如果使用到FindKey时,必须先指定IndexName或
IndexFieldNames。但我现在没有在任何地方赋IndexName或IndexFieldNames,
而直接使用ClientDataSet.FindKey,一切正常,测试结果速度比原来提高了
三倍,我很高兴,但很疑惑。
2.在以往使用的Table中,如果使用到FindKey时,必须是数据库中已经建立了
要FindKey的索引字段。但我现在随意使用ClientDataSet.FindKey数据库中
没有建立索引的字段,一切正常。
3.在以往使用的Table中,如果使用到FindKey时,必须是数据库中已经建立了
要FindKey的索引字段(复和字段),而且FindKey时,顺序必须与建立索引的
顺序相同。但我使用ClientDataSet.FindKey时,顺序如果与建立索引的顺序
相同,程序出错,FindKey字段顺序改变时,一切正常。
以上问题,本人甚感疑惑,如果那位高人熟悉ClientDataSet中,FindKey的
用法,请提供其详细用法,本人将非常感谢。
 
你是用ClientDataSet一次性获取表中所有的记录的吧?
这样的话用Findkey还有点效率。
如果是分段获取数据,我想你不会这样做吧?
 
其实用sql的select语句的效率是很高的。
何苦要用findkey呢?
 
最好使用SQL语句;
FindKey的区别:
使用在Table中时: For Paradox and dBASE tables, the key must always be an index。
而在clientDataSet中则没有限制。
在SQL Table中也有区别;
 
所谓findkey的效率高了俄想大约是因为clientdataset采用这个方法总是先把所有的数据都取到本地
尔后进行检索的结果.如果是这样的话,俄想那你的数据表中的数据可能也只有百条左右罢记录越多,
检索的速度越慢,包括用locate方法也是同样不信可以试试.至于findkey方法的变化俄也是觉得奇怪,就无从谈起了.
倾向的做法,还是用commandtext属性,那样子基本不影响速度无论记录有多少条,而且对于后面在应用
程序服务器中添加方法或者修改源程序有更大的弹性.
另李维的多层分布式应用系统篇中还介绍了一种使用locate的技巧方法,效率更高,建议看看
 
不错不错!
帖子收了!
但是还是建议用SQL语句~~
 
顶部