.NET 数据库大数据操作方案(插入、更新、删除、查询 、插入或更新)

2025-12-13 0 518

1、功能介绍

海量数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现

当列越多转换越慢,SqlSugar将转换性能做到极致,并且采用数据库最佳API

操作数据库达到极限性能,当然你如果不用sqlsugar了解一下原理也可以使用其他ORM实现

BulkCopy

BulkCopy是一种用于高效批量插入大量数据到数据库的技术。其原理是利用数据库系统提供的高性能数据导入接口,将数据以批量的方式一次性写入数据库,而不是逐条插入。这种方法比逐条插入要快得多,因为减少了数据库操作的次数,从而降低了系统开销

db.Fastest<DC_Scene>().BulkCopy(lstData);

db.Fastest<Order>().PageSize(100000).BulkCopy(insertObjs);

//Winfom中要用Task.Run 底层是异步实现

BulkUpdate

使用BulkCopy将大量数据快速导入临时表中。然后,通过表与表之间的高效操作(如UPDATE语句)进行数据更新,而不是逐条处理。这种方法降低了数据库操作的频率,减少了系统开销,从而提高了更新效率。最后,及时清理临时表,确保数据的一致性和数据库性能的稳定性。这种策略在大规模数据更新时能够显著提升性能和效率

db.Fastest<RealmAuctionDatum>().BulkUpdate(GetList())//更新

db.Fastest<RealmAuctionDatum>().PageSize(100000).BulkUpdate(GetList())//更新

//Winfom中要用Task.Run 底层是异步实现

BulkMerge (5.1.4.109)

大数据 : 插入或者更新

原理Oracle和SqlServer使用了Merge Into+BulkCopy ,其他库使用分页+BulkCopy +查询验证

db.Fastest<Order>().BulkMerge(List);

db.Fastest<Order>().PageSize(100000).BulkMerge(List);

//Winfom中要用Task.Run 底层是异步实现

使用BulkCopy将需要更新的数据批量导入到临时表(或者使用临时内存表)中。
使用MERGE INTO语句将临时表中的数据与目标表进行比较和合并。根据需要更新的条件,判断是否执行更新操作,同时可以在MERGE INTO语句中指定需要更新的列。
通过一次性的批量操作,实现了大规模数据的高效更新,减少了数据库操作的次数,提高了性能。
这种方法结合了数据库的批量导入和灵活的条件更新,适用于需要处理大规模数据更新的场景,提供了高效、快速的数据更新解决方案。

BulkQuery

纯手工指定映射+Emit绑定防止类型冲突引起的装拆和拆箱并且预热后达到原生水准

db.Queryable<Order>().ToList(); //分页降低内存 适合复杂的DTO转换和导出
List<Order> order = new List<Order>();
db.Queryable<Order>().ForEach(it=> { order.Add(it); /*禁止这儿操作数据库因为会循环*/} ,2000);

BulkDelete

删除操作慢的原因包括事务处理、索引更新、并发锁定、数据量大、触发器和硬件性能等。为提高性能,可分批次删除。

db.Deleteable<Order>(list).PageSize(1000).ExecuteCommand();

Select INTO

表和表之间的导入,如果在同一个库中并且表已存在性能比bulkcopy要快些

Select INTO

表和表之间的导入

//例1:不同实体插入 Select Into

db.Queryable<Order>()

//.IgnoreColumns(it=>it.Id) 如果是自增可以忽略,不过ID就不一样了

.Select(it=>new{ name=it.name,……})

.IntoTable<实体2>();

//例2: 同实体不同表插入

db.Queryable<Order>()

//.IgnoreColumns(it=>it.Id) 如果是自增可以忽略,不过ID就不一样了

.IntoTable<Order>(\”新表名\”);

SqlBulkCopy 类

(在.NET中提供的用于高性能批量操作数据的类)结合ORM框架进行大数据插入和更新。结合 SqlBulkCopy 进行大数据处理可以提供更高的性能,下面是一些优化原则和最佳实践:

1. 使用事务:

将 SqlBulkCopy 操作放在一个数据库事务中。这样,如果插入或更新过程中发生错误,你可以回滚整个操作,确保数据的一致性。

2. 调整 BatchSize

BatchSize 表示每个批次中的行数。根据数据库性能和网络带宽,调整批次大小以提高性能。通常情况下,使用合理的批次大小可以最大限度地减少数据库的往返次数,提高性能。

BulkCopyTimeout 表示超时时间(以秒为单位),如果在指定的时间内操作没有完成,操作将被中断。根据数据量的大小和网络条件,调整超时时间。

3. 使用临时表:
有时,将数据先插入到一个临时表中,然后执行SQL语句将数据从临时表复制到目标表,这种方法也可以提高性能。这是因为临时表可以不受约束和索引的影响,插入速度更快。
4. 注意内存使用:
在进行大数据操作时,需要注意内存的使用情况,以防止内存溢出。可以考虑分批次处理数据,避免一次性加载大量数据到内存中。
综上所述,结合使用 SqlBulkCopy 和ORM框架时,通过调整参数、合理使用事务、关闭索引和约束等方式,可以最大限度地提高大数据插入和更新的性能。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 .NET 数据库大数据操作方案(插入、更新、删除、查询 、插入或更新) https://www.zuozi.net/36470.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务