Table1.locate()速度太慢如何解决???????

sankis 2002-08-29 06:13:30
我的计算软件经常调用临时表查询数据,但是用Locate()指令太慢,有没有快些的指令?
...全文
147 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
manboo 2002-08-31
  • 打赏
  • 举报
回复
建立索引就会快些的!~如果有索引的化,采用2分查找,如果没有采用顺序遍历当然会慢了!
sankis 2002-08-31
  • 打赏
  • 举报
回复
各位朋友:
首先谢谢大家关注我的问题!
我写的是计算软件,和数据库没有关系。我做程序的时候考虑用表来存储数据
的主要原因是表格已经有了很多操作指令,比方说查询指令、添加、修改、删除指令。我完全可以用链表指针来实现上述操作,只不过这些指令得让我重新开发,而且最关键的就是用链表速度并不一定会高过表格。
我的软件计算处理的是一行或多行全动态的字符串公式,公式中包括我自己开发的若干函数,或函数的嵌套(复合函数)。比方说:
inat{i}{j}=sin(mb[i]+cd*int(cj/we+2)+if(a[i]>b[j],m1,m2))
这样的公式处理,程序得到上面的字符串,再根据计算得到结果(符点值)。在这里,除过数字以外的字符(包括数组)都是从这张表格中提取变量的,等计算结束后得到的是i*j个inat数组值,这些值又要放入这张表供别的函数或公式引用。如果该公式的i=40,j=40,那么光整个公式串就要处理1600次,每个公式中的变量要从表中提取,所以单是本公式计算从开始到结束就要读1万次参数表。在我的公式单元中,这个公式是比较简单的。这种自定义的函数就有三四百个。所以本张表的查询就非常关键。
因此我需要的不是读数据库。我要处理的和数据库一点关系都没有。


manboo 2002-08-31
  • 打赏
  • 举报
回复
2分查找,1024条记录10次比较就可以找到记录了速度还算可以!
sankis 2002-08-31
  • 打赏
  • 举报
回复
2分查找是什么意思?
zhxfzhxf1 2002-08-29
  • 打赏
  • 举报
回复
Locate对表格进行5000次以上的反复查询?
在表循环中一条记录一条记录地计算表达式吧
总之,尽量减少数据库访问次数
dailin 2002-08-29
  • 打赏
  • 举报
回复
顺便提一下,用Table来做很不方便,也没效率。如果有条件还是用QUERY或
ADOQUERY,ADODATESET,来做吧。当然的你的数据库得支持SQL。
yangxd 2002-08-29
  • 打赏
  • 举报
回复
有,而且我是实际做过的,如果你用table,就用findkey来作,速度是locate的百倍左右,不过要有索引。
johnsonrao 2002-08-29
  • 打赏
  • 举报
回复
"我只用单张表查询,记录大概有3000条左右,不定的。我用表格主要是用于计算程序。在程序计算过程中不停的存储中间变量,或者提取变量用于计算,所以查找的速度直接影响到了计算的速度。如果我要计算一个1000个长度的包含了数组的复杂公式,则要用Locate对表格进行5000次以上的反复查询。所以这个查询指令的速度就非常关键了。"

看起来你是在用Locate做循环,肯定有问题,一般Locate几次还说得过去,5000次以上就绝对不会用Locate,而会采用其它办法,首先考虑是否能进行批量Update处理,不行再考虑按要求排序后顺序移动指针等。

如果你真想解决问题,还是把你的现在做法说清楚一点。
dailin 2002-08-29
  • 打赏
  • 举报
回复
索引只是在数据库端建立,对程序员来说是透明的。当然在速度上会不同。
对建有索引的表的操作与没建索引的表的操作是一样的。
你采用的Locate方法
Table1.Locate('FieldName',xxxx,[]);

如果你用的是支持存储过程的数据库,把这个业务逻辑写在存储过程里会得到更好的执行效果。不过就你目前的情况而言,好像不行。

mingyeh 2002-08-29
  • 打赏
  • 举报
回复
我说大哥!locate指令要先把服务器上所有的数据取回来先
你还是用SQL吧
sankis 2002-08-29
  • 打赏
  • 举报
回复
我有一列是唯一识别的字符串值,我想建立索引应该没问题。
那么我在建立了索引之后要找一个记录该怎么做呢?
dailin 2002-08-29
  • 打赏
  • 举报
回复
1、建有索引的表记录更新后索引会自动更新,不过要资源开销的。所以一个表上的索引不能太多。:)
2、索引不用查找,在建立了索引的字段上查找速度会快很多。不是所有字段类型都能建索引。
3、:)不好意思这个我没做过。
sankis 2002-08-29
  • 打赏
  • 举报
回复
我可否电话问你,这样太急人了。我周六要出活。
sankis 2002-08-29
  • 打赏
  • 举报
回复
三个问题:
1:建立索引之后如果表格内容变更,索引是否会动态变更?
2:怎样建立索引之后查找?
3:dbf表格是否可以这样做?
dailin 2002-08-29
  • 打赏
  • 举报
回复
索引是建在表上。如Sql Server, Oracle,DB...
数据库里的用户表时都可以建索引,
Create Index Indexname On TableName column_name
sankis 2002-08-29
  • 打赏
  • 举报
回复
我没用数据库,Table1.databasename:='c:\blq';
dailin 2002-08-29
  • 打赏
  • 举报
回复
用的是什么数据库
sankis 2002-08-29
  • 打赏
  • 举报
回复
To: dailin()
没有,我不太会建索引。怎么做呢?
dailin 2002-08-29
  • 打赏
  • 举报
回复
查询的字段有没有建索引?
sankis 2002-08-29
  • 打赏
  • 举报
回复
土豆先生,多谢你关注我的问题。
我只用单张表查询,记录大概有3000条左右,不定的。我用表格主要是用于计算程序。在程序计算过程中不停的存储中间变量,或者提取变量用于计算,所以查找的速度直接影响到了计算的速度。如果我要计算一个1000个长度的包含了数组的复杂公式,则要用Locate对表格进行5000次以上的反复查询。所以这个查询指令的速度就非常关键了。
加载更多回复(2)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧