日期:2014-05-17  浏览次数:20448 次

求数据库存储速度以及解决方案
OS:WinXP SP3
DB:MSSQL2005开发版
SP:SP3

数据库表有1024个整数字段或者890个浮点数据字段。在写入一条记录时,用存储过程发现时间会比直接用SQL语句还要慢上一倍左右。直接用SQL语句插入的时候,我能做到的最大速度是60毫秒左右。求哪位大侠能给个方案,能不能做到存储一条记录控制在20毫秒以内。我使用的是CE程序通过TCP/IP协议进行数据库访问,并且是局域网(大侠们,我已经为这个问题发贴三次了,求解决啊,分数已经用的差不多了,请大家帮帮忙)

------解决方案--------------------
引用:
引用:

实用存储过程很慢?单条插入语句没有必要用存储过程


那如果插入5条数据呢,使用存储过程速度会有提升吗


如果在存储过程中,没有进行其它处理,只是单纯的
insert into table_name(col1,col2,col3....)
select @value1,@value2,@value3.....
这样的语句,还不如直接insert。。。
------解决方案--------------------
在SQLServer端想办法,又只是一条语句,感觉除了说提升硬件,没有好的办法了。你可以按你原来的思路做一个“暂存”数据的层,然后在这一层实现队列或者异步与数据库交互。或者用把暂存的数据定时更新到数据库。有点类似于MemoryCache的那种方式。
------解决方案--------------------
表的设计 
如果只是 1024个整型 每数据也存储1条 造成很大的数据也浪费.但是插入速度是最快的.

如果插入速度又要求 ,sql server i/o都是异步操作,我个人觉得只要不发生阻塞,不用管执行效率.
不知道你为什么要把每条插入操作 小于  20ms
如果要使考察i/o性能 建议  可以改变i/o架构,修改条带参数,或者修改sql server 恢复间隔等参数进行修改.



------解决方案--------------------
1024个整型 每数据页只存储1条,也就是每次插入都需要分配一页给这个表。

考虑存储过成批量插入,一次插入500-1000条,不知道你的程序是否有缓存,业务上是否允许短时间的延迟。

------解决方案--------------------
现在已明白lz的需求,
一个设备的数据收集终端,设备每一条记录有8196个属性,对应表的8196个字段,
由于设备产生数据的速度很快,要求数据库能有相应的速度相适应,
现在的问题是设备产生一条数据<=20MS,而数据库单条往8196字段插入数据的时间>20MS(现在是60MS)
,现在需要找到中间的平衡点,可选的方案:
1:解决数据库方面插入数据慢的问题,最好是单条往8196字段插入数据的时间<20MS
2:利用中间高速缓存设备存中间数据,批量向数据插入数据.(这个要做测试,即中间设备缓存容量,
  及批量插入时,批量到多少条记录可以让平均每条的插入数据时间<20MS)
3:降低设备运转速度,产生数据>=60ms(这个只怕设备用户接受不了)
我也没有好办法同时没有测试环境,帮总结一下。望各位帮忙想想办法。