我现在想把这些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
18 个解决方案
#1
google SqlBulkCopy
#2
两法都不好,楼上的方法对。
#3
#4
我是放入map里的,直接插入的,几十万几分钟搞定了!!!!!!!
#5
一次性的随便怎么做了,几十万最多也就几分钟,问题没人解答前估计已经搞定了
如果要一直这么做,很显然的SqlBulkCopy了
如果要一直这么做,很显然的SqlBulkCopy了
#6
DataTable 的数据组织好后,写好InsertCommand,可以使用 SqlDataAdapter.Update来一次性的把这个datatable 的数据更新到数据库中。当然这个速度是没有SqlBulkCopy 快。
Insert的时候不必每次都打开关闭数据库连接,打开一次然后可以一直 ExecuteNonQuery,整个做完了再close
Insert的时候不必每次都打开关闭数据库连接,打开一次然后可以一直 ExecuteNonQuery,整个做完了再close
#7
每当放入1000条记录,就提交一次,然后重新new一个Table赋值给原来的变量,再继续放入下面1000条记录。
如果可能的话,首先取消掉数据库表的索引、外键和触发器,等数据全都插入完毕,再加上这些数据库定义。这样会大大加快。
#8
在不同的硬件上(普通PC直到专用服务器)上性能各不相同。比如说普通pc上、也没有作上述取消数据库定义的动作、按照每秒3000条记录算,50万条记录也就3分钟。超过这个时间很多,那么就要考虑逻辑问题了。
#9
保持连接插入就行了 看服务器配置了 还有就是数据库增量设置 增量设的要比你10万条数据大 这样才不会触发数据库文件过多的去执行加大文件容量的操作
#10
什么叫做“数据库增量设置”?不懂。
#11
顶
#12
用XML传参给数据库,数据库读XM插入数据库,这样是有效方法之1。
#13
好 问题 mark 一下
#14
他说的是不是 数据库“自动增长”的百分比 ?
#15
如果每次Insert都要Open一次Close一次的话,那你的程序肯定是有问题的。
#16
用你这招了,不过有个问题想请教->
http://topic.csdn.net/u/20111121/18/f653120c-0a62-4c31-994b-f64e949ccbcc.html
#17
已回复。
#18
谢谢!!
#1
google SqlBulkCopy
#2
两法都不好,楼上的方法对。
#3
http://apps.hi.baidu.com/share/detail/17197990
http://www.cnblogs.com/Giozhou/archive/2010/05/21/SqlBulkCopy.html
http://www.cnblogs.com/Giozhou/archive/2010/05/21/SqlBulkCopy.html
#4
我是放入map里的,直接插入的,几十万几分钟搞定了!!!!!!!
#5
一次性的随便怎么做了,几十万最多也就几分钟,问题没人解答前估计已经搞定了
如果要一直这么做,很显然的SqlBulkCopy了
如果要一直这么做,很显然的SqlBulkCopy了
#6
DataTable 的数据组织好后,写好InsertCommand,可以使用 SqlDataAdapter.Update来一次性的把这个datatable 的数据更新到数据库中。当然这个速度是没有SqlBulkCopy 快。
Insert的时候不必每次都打开关闭数据库连接,打开一次然后可以一直 ExecuteNonQuery,整个做完了再close
Insert的时候不必每次都打开关闭数据库连接,打开一次然后可以一直 ExecuteNonQuery,整个做完了再close
#7
每当放入1000条记录,就提交一次,然后重新new一个Table赋值给原来的变量,再继续放入下面1000条记录。
如果可能的话,首先取消掉数据库表的索引、外键和触发器,等数据全都插入完毕,再加上这些数据库定义。这样会大大加快。
#8
在不同的硬件上(普通PC直到专用服务器)上性能各不相同。比如说普通pc上、也没有作上述取消数据库定义的动作、按照每秒3000条记录算,50万条记录也就3分钟。超过这个时间很多,那么就要考虑逻辑问题了。
#9
保持连接插入就行了 看服务器配置了 还有就是数据库增量设置 增量设的要比你10万条数据大 这样才不会触发数据库文件过多的去执行加大文件容量的操作
#10
什么叫做“数据库增量设置”?不懂。
#11
顶
#12
用XML传参给数据库,数据库读XM插入数据库,这样是有效方法之1。
#13
好 问题 mark 一下
#14
他说的是不是 数据库“自动增长”的百分比 ?
#15
如果每次Insert都要Open一次Close一次的话,那你的程序肯定是有问题的。
#16
用你这招了,不过有个问题想请教->
http://topic.csdn.net/u/20111121/18/f653120c-0a62-4c31-994b-f64e949ccbcc.html
#17
已回复。
#18
谢谢!!