一个小程序用delphi 5 开发的,
数据库是MS sqlserver 2000, 主要只有一个表,记录现在只有6000条左右,
字段有varchar, int还有一个Text;
客户端用户有20个左右;
对表的操作查询比较多,添加 ,修改,成批倒入,
现在的问题是:
1。查询的时候会比较慢(结果集较大的时候)
2。在成批倒入的时候会把表给锁住,真要命恳请大家解答。
数据库是MS sqlserver 2000, 主要只有一个表,记录现在只有6000条左右,
字段有varchar, int还有一个Text;
客户端用户有20个左右;
对表的操作查询比较多,添加 ,修改,成批倒入,
现在的问题是:
1。查询的时候会比较慢(结果集较大的时候)
2。在成批倒入的时候会把表给锁住,真要命恳请大家解答。
这里的field最好有建索引,再就是order by中的字段也最好有索引,区区6000条记录,这样还不够快找我
2.成批导入用缓存模式,每一百条提交一次(可以试一试再多少条提交时会更快),若用的事务,事务的处理过程不要太长(不要太花时间),不然则分成多段处理
成批导入时如果数据很多,可以选择在空闲的时候做这个操作,如果一边查询一边导数据肯定不行了。
想问一下你用什么方法导数据。
第二个问题:
我想知道查询(简单的select)会锁表吗?如果不会的话,对一个表的写入怎么可能会死锁呢?
1、共享锁:用于只读数据操作,它允许多个并发事务读取所锁定的资源
2、修改锁:在修改操作的初始化操作
3、排它锁:用于数据修改时操作(在数据修改时引发此锁,比如你的更新操作)
4、结构锁和意向所,就不多说了!具体请参阅《SQLServer数据库系统管理与应用开发》一书!
1 比如我有一个表information, 有6000条记录
我先有一个dbgrid, query, datasource 对应起来
其中query中查询select * from information where field1=...
查询出有5000条记录左右,显示在dbgrid中;2 现在我要修改其中一条,保存的时候要验证是否重复,于是用了另一个query,
SQL语句为select * from information where field1=... and
field2=... 但是我Open的时候会非常慢,而且内存也很快增长;
如果原先的query查询出的记录只有几百条时就很快。是什么原因呢?谢谢大家先~~
用sql monitor看时,有很多的fetch
初步怀疑是delphi的数据库操作是单线程的,因为第一个query查询出5000条记录,但实际上送到客户端的只有很少的,
因此在我执行其他查询(当然原先的query不能关闭)时,首先要把原先的查询执行完毕,5000条当然是很慢了,这也是用sql monitor看的时候为什么会有那么多的fetch,上网查了一下,解决方法好象都说要用两个database和session, 郁闷~~to: yczyk(小周)
怎么分批查询呢?
用select count(*) from information where field1=... and
field2=...
open后检查fields[0].asinteger是否大于0或是
用field1和field2定义关键字,你想写重复记录进去都难了
数据库:sqlserver 7.0
表 :tbl_inf 有6000条记录 (其中有一个Text字段)
tbl_inf_from 有<10 条记录程序:一个form, 两个query, 一个datasource,dbgrid(和其中一个query对应)
query1的查询语句为select inf_id, inf_word, ... from tbl_inf(其
中不包括Text字段, 6000条记录), 查询结果显示在dbgrid中,现执行第二
个query2(语句select * from tbl_inf_from)。结果: 虽然执行query2 的时候速度快一点(因为query1没select 那个Text字
段), 但用sql monitor查看的时候,还是有6000个fetch, 表明问题依
然。结论:我还是没有什么好的方法~~ :(请大家up一下(因为一个人不能连续回复三次以上,该死的作者 :)), 谢谢~~