请教用Delphi处理SQL数据库的效率问题!

bruce_zhao 2000-07-07 09:35:00
各位大侠:
我在做一个程序时,后台用的是SQL数据库,记录数有4万多条,我发现程序的效率很低,如果是修改了一条记录后保存,每次都会等待很久,如果有两人以上同时修改记录时(不是同一条记录),很容易出现死机,请问我该如何解决这个问题?如果用缓存的话,我怎么保证一个用户修改了记录后,另一个用户能够知道此条记录已修改?
还请各位大侠多多指点!小弟先行谢过!
...全文
604 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
bruce_zhao 2000-07-17
  • 打赏
  • 举报
回复
To Ary:UpdateText只能存储4K吗?
码狂 2000-07-17
  • 打赏
  • 举报
回复
真是不懂你的意思.
UpdateText、ReadText、WriteText是用于处理Text字段的T-SQL函数只能有于存储过程中呀,当然还要用到TextPRT.每次只能存储4K。
Delphi中用TBlobStream来操作BLOB字段,例如将一个WAV文件存入数据库中,或者存入一个Word文件。它是通过直接调用SQL的DB-LIB来实现的,可以存储2G的数据。

这些与数据库效率有关吗?
yinyu 2000-07-17
  • 打赏
  • 举报
回复
hblinux说的第4条很关键,用SQL而不要用DELPHI带的数据库操作语句
虽然这要多写一点代码但效率和资源占用优于后者
华南虎哥 2000-07-17
  • 打赏
  • 举报
回复
当SQL庞大时程序解决方案事项列表:
1、创建表时合理使用index
2、使用database关联
3、不使用ODBC
4、使用Query而尽量少用table
5、你的聪明才智+优化代码
qiuzhi 2000-07-17
  • 打赏
  • 举报
回复
To bruce_zhao:
你说的返回几千条记录,然后让用户检查正确性并修改后刷新,这样的确效率不高!
请问:你有没有可能根据某种条件,每次返回几条数据(比如通过ID什么)。
在页面中增加一个类似“下一页”的功能,这样每次就取一页的数据,可能效率会高些!

关注其他人的高见!

halfdream 2000-07-17
  • 打赏
  • 举报
回复
同意W102272.
同时,可以使用一个timestamp 字段作为Update的判断字段,以保证并发操作的正确性。

bruce_zhao 2000-07-16
  • 打赏
  • 举报
回复
To Ary:我的表中有主键。
由于我是修改别人的程序,要完全改动很麻烦,所以我只是想局部修改一下。
我看帮助上说:如果更新大量的文本可以用 Sql 的 UpdateText语句,但是具体的我不知怎么写,还请各位告知,我一样给分!
先谢了!
牛魔王的表弟 2000-07-16
  • 打赏
  • 举报
回复
为什么不试一下delphi5的ado控件
w102272 2000-07-16
  • 打赏
  • 举报
回复
只要你的数据库锁的级别不是Dirty Read,就不会出现别的人看不到已修改的部分的情况。加个确认标记在数据表上,用tquery限制一下,就算几个人检查,也可以分片检查,不会一次看4万记录呀!
蝈蝈俊 2000-07-16
  • 打赏
  • 举报
回复
看看:李维的书,里面谈到了一些关于提高数据库效率的问题
码狂 2000-07-16
  • 打赏
  • 举报
回复
qsb,表中有主键吗?我们能很好的处理七十多万行的数据!
guoyuzhang 2000-07-15
  • 打赏
  • 举报
回复
建议用分布式结构,因为采用分布式结构可以使用多种数据优化方法,如DataBase Pooling,Object Pooling等,并且如果如果有两个用户同时修改纪录,程序员可以提供较好的错误处理技术。
bruce_zhao 2000-07-15
  • 打赏
  • 举报
回复
又:有朋友说几个人用时容易死机是因为数据库加锁的缘故,说是在UPdate时加入一个参数不加锁数据库,这样别人也可以同时修改数据库,这种说法对不对?如何实现?
bruce_zhao 2000-07-15
  • 打赏
  • 举报
回复
实际上我的需要是这样的:有几个人来检查那四万多条记录的准确性,所以我是用DBGrid来显示所有的记录,让他们逐一检查,这样我只有返回全剖的记录。而在更新的时候如果采用缓存技术的话,又怕别的人看不到已修改的部分。各位大侠说我该怎么办?
to nickw:实际上我们的每个用户都是长时间连在服务器上的。
nickw 2000-07-15
  • 打赏
  • 举报
回复
建议使用DELPHI的分布多层应用结构。建立应用服务器,并在该层使用DELPHI的DATABASE POOLING技术来优化程序。DATABASE POOLING 实际上就是数据库连接的重用技术,(即:当第一个用户连接数据库时数据库引擎要为该连接分派许多系统资源,当用户操作执行完毕后数据库引擎并不释放这些资源。而是等到另一个客户端连接同一个数据库时重用以前分配的资源,从而缩短连接时间;同时由于降低了服务器的负荷进而加快了数据库的响应速度。) 非常适用于大量用户访问而连接时间又很短情况。从你描述的情况来看,非常适合使用这项技术。
IAmKylix 2000-07-15
  • 打赏
  • 举报
回复
Use 'SQL Statement','TransIsolation','Prepare','Stoc'
Don not use Table.
HaoGe 2000-07-10
  • 打赏
  • 举报
回复
实在不行就先删除,再insert好了。
update好象是速度很慢.
bruce_zhao 2000-07-10
  • 打赏
  • 举报
回复
我修改的字段不是索引,所以速度慢和索引应该无关。
To ameng007、qiuzhi:我用的是SQL Server,据说它如果返回5000条记录以上,就会出问题,不知是否如此?
JACKY_LEE 2000-07-10
  • 打赏
  • 举报
回复
1.速度慢和缓冲关系不大。你肯定是一次把所有数据都提取到本地(有可能是用TTable
或SQL写的不好造成)。你想想,造成应用程序效率低主要在于和数据库服务其交换数据。
缓冲大小只能解决本地处理速度。你可以试着将每次需要的数据取过来(不要告诉我你需要四万多条,那你程序就需要深层优化了)。同时注意减少和数据库打交道的次数。将需要的数据一次取出、一次处理、一次提交。
2.至于缓冲的刷新不一致,你可以通过DataBase的TransIsolation属性来控制。具体细节你可以参考资料。
corao 2000-07-09
  • 打赏
  • 举报
回复
关注
同时同意fyje的.
加载更多回复(9)

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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