十万条记录,怎样插入数据库最高效

ximomomoxinei2 2011-11-20 01:51:57
我现在从log文件(txt文件可以查看)里面读取到dataTable,用的是一个嵌套的for循环将log数据一行一行放到dataTable中。
我现在想把这些log文件放到数据库中,那么我暂时想到的有两种方式

方式1:先把所有数据读到dataTable,之后一次性放到数据库中的表。
方式2:不用dataTable了,直接在嵌套的for循环中一行一行的进行插入(用传统的insert一条一条插入)。

那种方式效率更高一些呢????
同时也有两个问题:

问题1:方式1中我把数据全都放在dataTable中,然后用什么sql语句进行一次性更新数据呢?(我只会一条一条的insert 有没有一次性插入许多行的sql语句)


问题2:我记得insert插入一条数据时open一次 close一次,如果十万条数据,那就open十万次 close十万次,这样是不是不合理?能否只open一次 close一次?
?
PS:我昨天发的一贴怎么显示“服务器暂时无法响应您的请求啊”->无奈只能重新发帖了
第一帖地址:http://topic.csdn.net/u/20111119/19/0e2e9a5f-3bee-4bdc-a680-ef0b9f196276.html
...全文
506 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
effun 2011-11-21
  • 打赏
  • 举报
回复
如果每次Insert都要Open一次Close一次的话,那你的程序肯定是有问题的。
ximomomoxinei3 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 sandy945 的回复:]
已回复。
[/Quote]
谢谢!!
哪吒 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sp1234 的回复:]

什么叫做“数据库增量设置”?不懂。
[/Quote]

他说的是不是 数据库“自动增长”的百分比 ?
阿非 2011-11-21
  • 打赏
  • 举报
回复
已回复。
ximomomoxinei3 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sandy945 的回复:]
google SqlBulkCopy
[/Quote]
用你这招了,不过有个问题想请教->
http://topic.csdn.net/u/20111121/18/f653120c-0a62-4c31-994b-f64e949ccbcc.html
ayun00 2011-11-20
  • 打赏
  • 举报
回复
好 问题 mark 一下
中国风 2011-11-20
  • 打赏
  • 举报
回复
用XML传参给数据库,数据库读XM插入数据库,这样是有效方法之1。
Eric_2014SH 2011-11-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sandy945 的回复:]
google SqlBulkCopy
[/Quote]

  • 打赏
  • 举报
回复
什么叫做“数据库增量设置”?不懂。
washboy 2011-11-20
  • 打赏
  • 举报
回复
保持连接插入就行了 看服务器配置了 还有就是数据库增量设置 增量设的要比你10万条数据大 这样才不会触发数据库文件过多的去执行加大文件容量的操作
  • 打赏
  • 举报
回复
在不同的硬件上(普通PC直到专用服务器)上性能各不相同。比如说普通pc上、也没有作上述取消数据库定义的动作、按照每秒3000条记录算,50万条记录也就3分钟。超过这个时间很多,那么就要考虑逻辑问题了。
  • 打赏
  • 举报
回复
[Quote=引用楼主 ximomomoxinei2 的回复:]
▪ CIO对私有云的顾虑有哪些?▪ 医疗行业的CIO们是如何看待云计...▪ 为什么要自建私有云?▪ 云计算能帮助实现绿色IT吗?▪ 如何选择IaaS提供商?
我现在从log文件(txt文件可以查看)里面读取到dataTable,用的是一个嵌套的for循环将log数据一行一行放到dataTable中。
[/Quote]

每当放入1000条记录,就提交一次,然后重新new一个Table赋值给原来的变量,再继续放入下面1000条记录。

如果可能的话,首先取消掉数据库表的索引、外键和触发器,等数据全都插入完毕,再加上这些数据库定义。这样会大大加快。
charles_y 2011-11-20
  • 打赏
  • 举报
回复
DataTable 的数据组织好后,写好InsertCommand,可以使用 SqlDataAdapter.Update来一次性的把这个datatable 的数据更新到数据库中。当然这个速度是没有SqlBulkCopy 快。

Insert的时候不必每次都打开关闭数据库连接,打开一次然后可以一直 ExecuteNonQuery,整个做完了再close
charles_y 2011-11-20
  • 打赏
  • 举报
回复
一次性的随便怎么做了,几十万最多也就几分钟,问题没人解答前估计已经搞定了

如果要一直这么做,很显然的SqlBulkCopy了
wintree 2011-11-20
  • 打赏
  • 举报
回复
我是放入map里的,直接插入的,几十万几分钟搞定了!!!!!!!
ggw 2011-11-20
  • 打赏
  • 举报
回复
两法都不好,楼上的方法对。
阿非 2011-11-20
  • 打赏
  • 举报
回复
google SqlBulkCopy

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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