大神指点提高sqlserver的写入速度

jq8chu 2013-03-12 12:41:49
一个类似生产者消费者问题的系统,一个线程采集数据存入内存中开辟的缓冲区,另一个线程从缓冲区取数据存入sqlserver数据库,存储部分的代码大致如下:
m_pRecorset->AddNew();
m_pRecorset->PutCollect
……
m_pRecorset->Update();

vc + ADO的方式连接数据库,数据表前三个字段很简单,第四个字段是image类型的,大小为2000个float数,在存本地数据库的时候每秒存100条记录的时候数据就开始在缓冲区积压了,连局域网其他数据库更差劲,每秒40条记录已经是极限了……
各位好心的大神帮帮忙,怎样优化一下,关于ado存储这一块不是很熟,网上有说用UpdateBatch,不知道怎么用,能凑效不
...全文
537 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2013-03-13
  • 打赏
  • 举报
回复
ado我个人认为更多的是对数据库发起一些“请求”,而不应该频繁对数据库或者上面的数据进行“操作”,因为就像《SQL语言艺术》这本书上说的,越接近DBMS的核心,运行速度越快,那些在程序面运行的东西,几乎不可能比统一复杂度的在DBMS上面直接运行的SQL语句高效。我很多年 没编程了,这方面不熟悉,但是从操作发生位置来看,尽可能放到SQLServer层面上去实现,这样就算优化起来也会块很多。
jq8chu 2013-03-13
  • 打赏
  • 举报
回复
引用 3 楼 DBA_Huangzj 的回复:
引用 2 楼 jq8chu 的回复: DBA_Huangzj 1、尽量把对SQLServer的操作放到SQLServer层面上做,这个怎么讲哦,能举个例子吗?谢谢我个人喜欢用存储过程实现业务逻辑,而前端只是传需要增删改的参数值就可以了。另外下次引用一下。不然我不知道你回复我了
谢了哦,我发现这个速度限制应该是ado操作时update的原因,与字段的数据量无关,刚才把image那个字段不存,速度基本一样,估计得换一种存储策略了,网上有说用updatebatch方法的,不过不知道这个方法怎么样,忘指点
發糞塗牆 2013-03-12
  • 打赏
  • 举报
回复
引用 2 楼 jq8chu 的回复:
DBA_Huangzj 1、尽量把对SQLServer的操作放到SQLServer层面上做,这个怎么讲哦,能举个例子吗?谢谢
我个人喜欢用存储过程实现业务逻辑,而前端只是传需要增删改的参数值就可以了。另外下次引用一下。不然我不知道你回复我了
jq8chu 2013-03-12
  • 打赏
  • 举报
回复
DBA_Huangzj 1、尽量把对SQLServer的操作放到SQLServer层面上做,这个怎么讲哦,能举个例子吗?谢谢
發糞塗牆 2013-03-12
  • 打赏
  • 举报
回复
1、尽量把对SQLServer的操作放到SQLServer层面上做。 2、对应的表上索引、约束尽可能少,除非必要。 3、把数据库恢复模式改成大容量日志或者简单模式。 4、可以降低索引页的填充因子。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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