社区
VB
帖子详情
怎样提高向SQLServer中插入数据时的速度
YCX1985
2012-08-29 03:34:57
通过SqlCommand向数据SQLServer2005里插入数据。怎么提高数据的写入速度?现在一张表一次插入5000行左右的数据。100多列。需要10多秒。还有每次建立与SQLServer的连接,头一次都对相比较慢,有什么解决的办法?
...全文
1797
26
打赏
收藏
怎样提高向SQLServer中插入数据时的速度
通过SqlCommand向数据SQLServer2005里插入数据。怎么提高数据的写入速度?现在一张表一次插入5000行左右的数据。100多列。需要10多秒。还有每次建立与SQLServer的连接,头一次都对相比较慢,有什么解决的办法?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
long_0662
2012-09-04
打赏
举报
回复
使用stringbuilder一次性或分批次生产SQL insert语句提交执行
long_0662
2012-09-04
打赏
举报
回复
使用stringbuilder一次性或分批次生产SQL insert语句提交执行
long_0662
2012-09-04
打赏
举报
回复
使用stringbuilder一次性或分批次生产SQL insert语句提交执行
aremos4u
2012-09-03
打赏
举报
回复
怎么看怎么像是从视图扒下来的。
wwwljh
2012-09-03
打赏
举报
回复
[Quote=引用 12 楼 的回复:]
引用 4 楼 的回复:
序号 名称 描述
1 ItemCode 物料编号
2 ItemName 物料描述
3 FrgnName 外文描述
4 ItmsGrpCod 物料组
5 CstGrpCode 关税组
6 VatGourpSa 销项税定义
7 CodeBars 条形码
8 VATLiable 税收定义
9 PrchseItem 采购物料 [是/否]
10 SellIt……
[/Quote]
这个看着好像是SAP的一个低端ERP产品数据库中的一张表。很多人都没听过SAP这个公司。世界500强的公司中70%多都是用的SAP的产品。
bwangel
2012-09-02
打赏
举报
回复
插入的效率是放在次要地位的。查询效率是放在第一位的。
100多行的表,插5000条数据,用10秒,也能接受。在界面UI上优化一下就行了,比如设置一个进度条什么的。
如果求快,可以使用各数据库系统的批量插入方法,比如sqlserver的BulkCopy,oracle的数组方法等。
但那没有通用性,除非是非常讲究效率的场合。
w327555162
2012-09-02
打赏
举报
回复
这个表真心要忧化一下
ycg_893
2012-09-02
打赏
举报
回复
像两百个字段的表,插入速度,无论再优化,也会有限制的,如果这些字段还有索引还会更慢,因此在不改变设计的情况下要提高速度:
1、减少索引(不过会影响查询速度)
2、带事务批量更新(批量插入后,统一提交事务)
3、若能实现,尽可能采用以下这种方法,能成倍提高效率
INNER INTO A(a,b,c)
SELECT a,b,c from B
4、最根本的解决之道合理设计
YCX1985
2012-08-30
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
试在建立存储过程,在存储过程中写插入语句,写的值以参数形式传值过去。
[/Quote]
这种方法可以测一下,但感觉没什么用。
YCX1985
2012-08-30
打赏
举报
回复
大家好像跑题了!先别管数据库设计合不合理了。表也不是我设计的,这么设计也会有它的道理的。肯定会有些问题。现在我遇到问题有什么方法可以让插入的速度快一些。
代码誊写工
2012-08-29
打赏
举报
回复
列式数据库最大的好处之一就是不怕一个表的列多,因为每个列实际上都是单独存储的。(看产品介绍的时候了解的,具体原理还在研究,我的猜测是每一列其实就是一个Hashset,主健则是一个多指针值的HashTable)
以专业开发人员为伍
2012-08-29
打赏
举报
回复
[Quote=引用 11 楼 的回复:]
设计肯定有不合理的地方,但是有些1对1的参数。如果经常用到每次到库里去RUN一下才能出来结果会响应效率。
[/Quote]
整个前边的解释都不值得看,只有这一句还有点共性。
不同子系统就应该分开,不能因为可以当作“一对一”关系就拼在一起。例如移动公司客户难道要为了“第一个通讯录电话、第二个通讯录电话、第三个通讯录电话、.....座机打电话、老板打电话、老婆打电话”这样的字段来建立客户资料?
不是这样找理由的!
代码誊写工
2012-08-29
打赏
举报
回复
[Quote=引用 9 楼 的回复:]
引用 7 楼 的回复:
改数据库,用列式数据库。
Sybase现在主推列式数据库,优点是大数据的查询效率高。缺点是插入、更新、删除的效率低。
听说可以靠多硬盘并行读写弥补列式数据库在这方面效率低的问题。但是确实没有过列式数据库。希望用过的朋友多发表一下意见。
[/Quote]
我这主要测试的是infiniDB;顺序插入速度非常快,但随机插入基本和普通行式相同,存储空间占用较小,不用设置索引,因为值本身就是索引,因此查询较快,本身支持时间分区,但对时间是业务字段本身的话似乎帮助不大。
以专业开发人员为伍
2012-08-29
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
序号 名称 描述
1 ItemCode 物料编号
2 ItemName 物料描述
3 FrgnName 外文描述
4 ItmsGrpCod 物料组
5 CstGrpCode 关税组
6 VatGourpSa 销项税定义
7 CodeBars 条形码
8 VATLiable 税收定义
9 PrchseItem 采购物料 [是/否]
10 SellItem 销售物料 [是/否]
……
[/Quote]
这一家的ERP还真扯。搞大串联啊。
是哪一家的ERP?能曝光一下吗?
YCX1985
2012-08-29
打赏
举报
回复
[Quote=引用 8 楼 的回复:]
这样的设计还真没见过?
例如:
1、计量单位应当用计量组,计量组内有多种计量单位,单位之间存在换算率,不同的部门可实现不同的默认计量单位;
2、像采购物料、销售物料、库存物料这样的字段应当是一对多,并设有系统标识,要是以后增加、代加工物料、二次加工物料等,是不是字段还要增加。别看传统ERP有这几个字段,但现在业务已更加复杂了。
3、寄售商品仓库、盘点数就更不合理了,商品库存对应的是仓……
[/Quote]
实际这里面我没有加字段类型再加上字段的描述也不是很清楚会让大家有点不理解。
1、计量单位就是分采购、库存、销售。比如一个物料采购来统计是一箱,库存存放统计一瓶,销售的统计的也是瓶。所以表中就有三个计量单位。箱、瓶、瓶。
2、这里是布尔值。标记物料是否可以采购,是否用来销售,是否计算库存。如果需要标记是否代加工物料,是否是二次加工物料。这些可以通过表中预留的属性字段来标记,属性字段也是布尔值,才一个Bit在数据库中不会有太大冗余。如果再加一个表存放这些标记,在业务查询起来效率很率。
3、寄售商品仓库相当于默认仓库。
4、5、订购数和承诺数是采购和销售数量。制造商和供应商出现在物料表的基本都指默认制造商和默认供应商。在MRP和业务中常会到这些参数。当需要的时候多表查询效率很低。
6、长、宽、高对于物料基本是唯一的。不会有一对多的。长、宽、高确实了一个物料的规格。一个长、宽、高不确实的物料怎么计算货位?规格不一样的物料就可以视为是两个物料。就好比600ML的可乐和2.5L的可乐。你在库里就不能只建一个物料吧。
设计肯定有不合理的地方,但是有些1对1的参数。如果经常用到每次到库里去RUN一下才能出来结果会响应效率。
YCX1985
2012-08-29
打赏
举报
回复
151 CreateDate 生产日期
152 UpdateDate 更新日期
153 SalFactor1 销售因子 1
154 SalFactor2 销售因子 2
155 SalFactor3 销售因子 3
156 SalFactor4 销售因子 4
157 PurFactor1 采购因子 1
158 PurFactor2 采购因子 2
159 PurFactor3 采购因子 3
160 PurFactor4 采购因子 4
161 SalFormula 销售公式
162 PurFormula 采购公式
163 VatGroupPu 采购税收定义
164 AvgPrice 物料成本
165 PurPackMsr 包装计量单位(采购)
166 PurPackUn 每包装计量单位的数量
167 SalPackMsr 销售包
168 SalPackUn 包装计量单位(销售)
169 ManBtchNum 管理批号 [是/否]
170 ManOutOnly 仅在退出时管理 SN
171 validFor 活跃
172 validFrom 激活开始日期
173 validTo 激活结束日期
174 frozenFor 不活跃
175 frozenFrom 未激活开始日期
176 frozenTo 未激活结束日期
177 ValidComm 激活注释
178 FrozenComm 未激活注释
179 SWW 附加标识
180 Deleted 已删除
181 ExpensAcct 费用科目
182 FrgnInAcct 收入科目 - 外国
183 ShipType 装运类型
184 GLMethod 设置总帐科目按
185 ECInAcct 收入科目 - 欧盟
186 FrgnExpAcc 费用科目 - 外国
187 ECExpAcc 费用科目 - 欧盟
188 TaxType 税收类型
189 ByWh 按仓库的库存管理
190 WTLiable 应付预扣税
191 ItemType 物料类型
192 WarrntTmpl 保修模板
193 BaseUnit 基本单位名称
194 CountryOrg 原产地国家
195 StockValue 库存值
196 Phantom 虚拟物料
197 IssueMthd 发货方法
198 FREE1 以 % 表示的收益
199 PricingPrc 定价百分比
200 MngMethod 管理方法
201 ReorderPnt 重订货点
202 InvntryUom 库存计量单位
203 PlaningSys 计划方法
204 PrcrmntMtd 补给方式
205 OrdrIntrvl 订单间隔
206 OrdrMulti 订单倍数
207 MinOrdrQty 最少订单数量
208 LeadTime 提前期
209 IndirctTax 间接税
210 TaxCodeAR 税码 (应收)
211 TaxCodeAP 税码 (应付)
212 OSvcCode 外向服务代码
213 ISvcCode 内向服务代码
214 ServiceGrp 服务组
215 NCMCode NCM 代码
216 MatType 物料类型
217 MatGrp 物料组
218 ProductSrc 产品来源
219 ServiceCtg 服务类别
220 ItemClass 服务或物料
221 Excisable 应纳税的 [是/否]
222 ChapterID 章节标识
223 NotifyASN 通知有效序号
224 ProAssNum 临时评估编号
225 AssblValue 可评估值
226 DNFEntry DNF 代码条目
227 Spec 物料规格说明
228 TaxCtg 计税类别
wwwljh
2012-08-29
打赏
举报
回复
[Quote=引用 7 楼 的回复:]
改数据库,用列式数据库。
[/Quote]
Sybase现在主推列式数据库,优点是大数据的查询效率高。缺点是插入、更新、删除的效率低。
听说可以靠多硬盘并行读写弥补列式数据库在这方面效率低的问题。但是确实没有过列式数据库。希望用过的朋友多发表一下意见。
ycg_893
2012-08-29
打赏
举报
回复
这样的设计还真没见过?
例如:
1、计量单位应当用计量组,计量组内有多种计量单位,单位之间存在换算率,不同的部门可实现不同的默认计量单位;
2、像采购物料、销售物料、库存物料这样的字段应当是一对多,并设有系统标识,要是以后增加、代加工物料、二次加工物料等,是不是字段还要增加。别看传统ERP有这几个字段,但现在业务已更加复杂了。
3、寄售商品仓库、盘点数就更不合理了,商品库存对应的是仓库,这样的数据应当在库存业务表。
4、客户、供应商订购数也应当是订单相关业务表
5、对于制造商,应当是主要供应商,同一种物料是有可能很多家供应商的。至于物料佣金更应当放在佣金相关业务表,而不是物料表。因此才能实现同一物料不同供应商的价格管理等。
6、后面的什么高度、宽度等更不合理,可设计成参数定义,参数组(引用参数定义),物料引用参数组(一对多),这样无论有多少参数均由列转为行。
8、至于属性也可采用类似参数方式。
9、合理设计,该表不会超过30个字段。
以上仅个人看法,无须在意
代码誊写工
2012-08-29
打赏
举报
回复
改数据库,用列式数据库。
王子文龙
2012-08-29
打赏
举报
回复
在进行插入之前打开连接,之后批量操作,将所有数据插入完成之后在关闭连接
加载更多回复(5)
Sqlserver
大
数据
量
插入
速度
慢或丢失
数据
的解决方法
Sqlserver
大
数据
量
插入
速度
慢或丢失
数据
的解决方法
Sqlserver
大
数据
量
插入
速度
慢或丢失
数据
的解决方法
C#实现批量
插入
sqlserver
数据
C#实现的批量
插入
sqlserver
数据
,使用三种方法,可以看出效率高低,insert是效率最低,sqlbulkcopy和表值参数效率很高且两者效率相当。
针对
Sqlserver
大
数据
量
插入
速度
慢或丢失
数据
的解决方法
主要介绍了针对
Sqlserver
大
数据
量
插入
速度
慢或丢失
数据
的解决方法,很有实用价值,需要的朋友可以参考下
SQLServer
中
防止并发
插入
重复
数据
的方法详解
SQLServer
中
防止并发
插入
重复
数据
,大致有以下几种方法: 1.使用Primary Key,Unique Key等在
数据
库层面让重复
数据
无法
插入
。 2.
插入
时
使用条件 insert into Table(****) select **** where not exists(select 1 from Table where ****); 3.使用SERIALIZABLE隔离级别,并且使用updlock或者xlock锁提示(等效于在默认隔离级别下使用(updlock,holdlock)或(xlock,holdlock)) set transaction isolation level SE
sql server学习资料
sql server学习资源完整,短
时
间可以迅速增长知识
VB
16,722
社区成员
110,526
社区内容
发帖
与我相关
我的任务
VB
VB技术相关讨论,主要为经典vb,即VB6.0
复制链接
扫一扫
分享
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章