H herald Unregistered / Unconfirmed GUEST, unregistred user! 1999-10-23 #1 我写了一个delphi数据库程序(有索引的),现在有2万个记录,现在我发现由于记录的增加,无论是插入数据还是提取数据都变得很慢,比如我在数据库中提取2000个记录,要60秒.写100个新纪录也要15秒(celeron450的机器)以前我在数据库较小的情况下没有这样的问题.谁有这样的经验? 用TBATCHMOVE能不能解决问题??
我写了一个delphi数据库程序(有索引的),现在有2万个记录,现在我发现由于记录的增加,无论是插入数据还是提取数据都变得很慢,比如我在数据库中提取2000个记录,要60秒.写100个新纪录也要15秒(celeron450的机器)以前我在数据库较小的情况下没有这样的问题.谁有这样的经验? 用TBATCHMOVE能不能解决问题??
A amo Unregistered / Unconfirmed GUEST, unregistred user! 1999-10-23 #2 用Batchmove是快一些, 不过,二万条记录应该很快。 你用什么类型的数据库,进行了些什么操作?
P pxlei Unregistered / Unconfirmed GUEST, unregistred user! 1999-10-23 #3 一个小建议: 如果你用SQL语句,请先prepare. 另:在对数据库操作时,最好不要遍历。
L LSS Unregistered / Unconfirmed GUEST, unregistred user! 1999-10-23 #4 不要用RECORDCOUNT,FILTER,CALCFIELD等等
W wrench Unregistered / Unconfirmed GUEST, unregistred user! 1999-10-23 #5 千万不要用Table 可能的话,多用存储过程,触发器,查询
C CJ Unregistered / Unconfirmed GUEST, unregistred user! 1999-10-23 #6 PARADOX? 情愿用DBASE!速度快多了。 另:本地数据库,TABLE可以,QUERY反而慢
J jobsxy Unregistered / Unconfirmed GUEST, unregistred user! 1999-10-23 #7 有这种事?看来我得注意了,我正在搞的这个系统每年会增加5万条记录,我很 想听听高手对这事的看法
H hntangwei Unregistered / Unconfirmed GUEST, unregistred user! 1999-10-23 #8 对啦!记着少用query吧,最好不要用那种一下子发所有的记录都取出的方法, 不然话,你就。。。嘿嘿
C CJ Unregistered / Unconfirmed GUEST, unregistred user! 1999-10-23 #9 >对啦!记着少用query吧, 也不是那么说 9万条?劝你至少用Local Interbase
H herald Unregistered / Unconfirmed GUEST, unregistred user! 1999-10-27 #10 我在程序中遍历了数据库,但是没有使用sql语言.而是使用了table.xxxxx来完成任务 是不是这个原因?
C cAkk Unregistered / Unconfirmed GUEST, unregistred user! 1999-10-27 #11 1.不要遍历数据库! 2.SQL语句也没有遍历的功能吧? 3.你遍历数据库干什么? 用sql语句查询你要的纪录不就可以了?
R rss Unregistered / Unconfirmed GUEST, unregistred user! 1999-10-27 #14 换用Interbase,善用存储过程,触发器,视图等大幅提高效率。
C cytown Unregistered / Unconfirmed GUEST, unregistred user! 1999-10-27 #15 千万不要用table, 用query来过滤一下就会快很多, 遍历就会非常非常慢了:-(
S screen Unregistered / Unconfirmed GUEST, unregistred user! 1999-11-13 #16 对网络数据库,比如c/s模式的,建议多用query,速度比用table快很多. 在进行开发时,应多用存储过程,能在服务器上完成的操作,千万不要下到 客户机上来完成.对记录数大的表,应多建立视图. 对触发器建议少用,虽然可以简化一些编程,但控制不灵活,有时会出现不可预期 的问题.建议还是用程序控制的好. 对本地库用table和query的速度差不多,dbase的性能是很不错的. 对使用频繁的表,可以建一个链表来存储,把对表的查询转化为对链表 的遍历,速度很快. 就想到这么多.
对网络数据库,比如c/s模式的,建议多用query,速度比用table快很多. 在进行开发时,应多用存储过程,能在服务器上完成的操作,千万不要下到 客户机上来完成.对记录数大的表,应多建立视图. 对触发器建议少用,虽然可以简化一些编程,但控制不灵活,有时会出现不可预期 的问题.建议还是用程序控制的好. 对本地库用table和query的速度差不多,dbase的性能是很不错的. 对使用频繁的表,可以建一个链表来存储,把对表的查询转化为对链表 的遍历,速度很快. 就想到这么多.
T taik Unregistered / Unconfirmed GUEST, unregistred user! 1999-11-13 #17 1.到现在还不知你用什么数据库,不同的数据库有不同的技巧。 2.遍历数据库有时是需要的,这是数据结构和算法就很有讲究了。 3.C/S情况下有时TTable反比TQuery快,需要具体情况分析。
D dreamer Unregistered / Unconfirmed GUEST, unregistred user! 1999-12-23 #18 2万条记录就发生这种事,一定是程序编码的问题。如果是本地数据库,用TTABLE表比TQuery快得多。我曾经对一个比较大的本地数据库尝试过许多次,Filter速度比SQL 查询速度快得多。
K kangxy Unregistered / Unconfirmed GUEST, unregistred user! 1999-12-23 #19 李维的<Delphi3.0从入门到精通>对数据库的使用,(用Table or Query) 等有很好的讲解,数据库的效率等. 共有好几章.
H Hexi Unregistered / Unconfirmed GUEST, unregistred user! 1999-12-23 #20 在单层中用TTable, 在多层中用TQuery, 尽量用视图或存储过程、触发器的,在程序中少用SQL语句。 在三层中最好少用DBGrid.尤其是Internet