海量数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现
当列越多转换越慢,SqlSugar将转换性能做到极致,并且采用数据库最佳API
操作数据库达到极限性能
大数据插入
db.Fastest<DC_Scene>().BulkCopy(lstData); db.Fastest<Order>().PageSize(100000).BulkCopy(insertObjs); //Winfom中要用Task.Run 底层是异步实现
大数据更新,通过update 到临时表 然后表对表进行Update Join
db.Fastest<RealmAuctionDatum>().BulkUpdate(GetList())//更新 db.Fastest<RealmAuctionDatum>().PageSize(100000).BulkUpdate(GetList())//更新 //Winfom中要用Task.Run 底层是异步实现
大数据 : 插入或者更新
//原理Oracle和SqlServer使用了Merge Into+BulkCopy //其他库底层是 db.Storageable(list).ExecuteSqlBulkCopy() db.Fastest<Order>().BulkMerge(List); db.Fastest<Order>().PageSize(100000).BulkMerge(List); //Winfom中要用Task.Run 底层是异步实现
普通查询就行了性能超快 db.Queryable<Order>().ToList();//比Dapper略快 //分页降低内存 适合复杂的DTO转换和导出 List<Order> order = new List<Order>(); db.Queryable<Order>().ForEach(it=> { order.Add(it); /*禁止这儿操作数据库因为会循环*/} ,2000);
直接用分页删除就行了
db.Deleteable<Order>(list).PageSize(1000).ExecuteCommand();
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>("新表名");
SqlSugar ORM更多用法:
Nuget安装 - SqlSugar 5x - .NET果糖网