循环插入,哪种快消耗低

-一个大坑 2019-09-07 09:51:40
根据查询进行插入。主要查询时比较慢。sql如果不能优化,哪种好
目前只能想到这两种,还有其他的吗
1.用10线程单独插入快
2.添加到Transaction一起执行
...全文
1083 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
hegang888888888 2019-09-10
  • 打赏
  • 举报
回复
用xml,在sql里面解析
xiaoxiangqing 2019-09-10
  • 打赏
  • 举报
回复
用多线程插入会快些
luj_1768 2019-09-10
  • 打赏
  • 举报
回复
其实就是一次性插入好。你想知道的可能都是些数据库系统的优化策略,基本上与应用开发无关。按照你讲的情况,常用的优化策略有:快照技术和游标技术可选。具体的内容需要考虑你的实际的数据分布情况。
Hello World, 2019-09-09
  • 打赏
  • 举报
回复
EF的也可以,参考这个试试
-一个大坑 2019-09-09
  • 打赏
  • 举报
回复
引用 13 楼 Hello World, 的回复:
参考
我就是觉得list插入比较慢,直接insert into XXX select .....插入,没有查datatable然后转list,然后用ef插入
Hello World, 2019-09-09
  • 打赏
  • 举报
回复
-一个大坑 2019-09-09
  • 打赏
  • 举报
回复
引用 6 楼 Hello World, 的回复:
如果数据量不是很大的话,那就先写入内存表,再批量插入,数据量大的话分批次写入
内存表是指什么,datatable吗?datatable也不好往数据库插数据
-一个大坑 2019-09-09
  • 打赏
  • 举报
回复
引用 10 楼 exception92 的回复:
其实还是要解决查询慢的问题
查询慢不好解决,用的别人的数据库的数据,我对那个系统不熟,sql也是别人给的
exception92 2019-09-09
  • 打赏
  • 举报
回复
其实还是要解决查询慢的问题
exception92 2019-09-09
  • 打赏
  • 举报
回复
线程插入其实就是I/O操作,有专有的I/O线程执行。第二种事物确保操作的准确性,向数据库服务器发送执行命令,事物的处理交由数据库服务处理了,可以记录返回值时间对比一下。
双杯献酒 2019-09-09
  • 打赏
  • 举报
回复
既然已经知道是查询慢, 当然就是优化查询, 跟怎样插入毫无关系。
Hello World, 2019-09-09
  • 打赏
  • 举报
回复
20W也不知道有多大啊,一条记录大概多少字节,再配合你的服务器内存来决定,要不你可以试下用代码来处理好再插入,像SqlBulkCopy性能都很好的(表太大还可以设置BatchSize分批写入)
  • 打赏
  • 举报
回复
引用 25 楼 -一个大坑 的回复:
[quote=引用 24 楼 胖叔叔写代码 的回复:] [quote=引用 20 楼 -一个大坑 的回复:] 正在看SqlBulkCopy column.ColOrder = reader.GetDbValue("colorder"); 这个是求什么的?第几列? while (reader.Read()) { SysColumn column = new SysColumn(); column.Name = reader.GetDbValue("name"); column.ColOrder = reader.GetDbValue("colorder"); columns.Add(column); }
获取这一行数据中的'列名'列的数据,就这个意思啊。[/quote] column.ColOrder 这个是int,如果是列的数据应该是object[/quote] GetDbValue获取到的是原始db数据值 和 null
-一个大坑 2019-09-09
  • 打赏
  • 举报
回复
引用 27 楼 YBcsdn1996 的回复:
SqlBulkCopy 配合分批
有没有写好可以直接用的,算了,我结贴,重新发一个
YBcsdn1996 2019-09-09
  • 打赏
  • 举报
回复
SqlBulkCopy 配合分批
YBcsdn1996 2019-09-09
  • 打赏
  • 举报
回复
SqlBulkCopy

这个能稍微好一点
-一个大坑 2019-09-09
  • 打赏
  • 举报
回复
引用 24 楼 胖叔叔写代码 的回复:
[quote=引用 20 楼 -一个大坑 的回复:] 正在看SqlBulkCopy column.ColOrder = reader.GetDbValue("colorder"); 这个是求什么的?第几列? while (reader.Read()) { SysColumn column = new SysColumn(); column.Name = reader.GetDbValue("name"); column.ColOrder = reader.GetDbValue("colorder"); columns.Add(column); }
获取这一行数据中的'列名'列的数据,就这个意思啊。[/quote] column.ColOrder 这个是int,如果是列的数据应该是object
  • 打赏
  • 举报
回复
引用 20 楼 -一个大坑 的回复:
正在看SqlBulkCopy column.ColOrder = reader.GetDbValue("colorder"); 这个是求什么的?第几列? while (reader.Read()) { SysColumn column = new SysColumn(); column.Name = reader.GetDbValue("name"); column.ColOrder = reader.GetDbValue("colorder"); columns.Add(column); }
获取这一行数据中的'列名'列的数据,就这个意思啊。
  • 打赏
  • 举报
回复
引用 21 楼 -一个大坑 的回复:
[quote=引用 18 楼 胖叔叔写代码 的回复:] 多线程插入实一下你就知道了,插入会锁表,多线程也不过是大家一起排队。 大量数据插入建议合并插入语句,一次多行插入,速度会快很多。
插入到不同的表应该可以吧[/quote] 那就不是循环插入了啊,是多表同时插入。 这样建议用事物包裹,毕竟要保证数据一致性的。
-一个大坑 2019-09-09
  • 打赏
  • 举报
回复
引用 18 楼 胖叔叔写代码 的回复:
多线程插入实一下你就知道了,插入会锁表,多线程也不过是大家一起排队。 大量数据插入建议合并插入语句,一次多行插入,速度会快很多。
插入到不同的表应该可以吧
加载更多回复(12)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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