我们目前有一个依赖独立数据库ORM的自制实体框架.
我必须构建一个在DB中批量加载元数据的软件,这个模块可以有大约150个excel模板(有关单元格位置,单元格类型,格式等信息).
我可以操作
>通过sql批处理(更快,但交互更少)
>通过在内存中构建对象,使用LINQ查询处理它们以进行各种完整性检查,然后对DB进行修改
我知道sql是绝对快的,但我会知道…它是多快?
解决方法
在大多数情况下,TBH并不完全是
linq或sql的问题.您的性能将与您插入的数据量,表中当前的数据量和您维护的索引有关.
第二,您是否需要跨数据的多个列执行交叉检查和/或完整性检查.我已经有一些情况,添加索引和重建表已经花费了从几分钟到几毫秒的时间,这是因为分片不好和缺少算法.
Linq是生成sql插入和修改逻辑的有效方式.但是你总是会遇到这样的模式:
>从数据库获取数据
>使用Linq修改数据
>将更改提交到数据库.
如果您有任何逻辑可以在插入中使用,您可以使用set逻辑在sql中进行更新.例如.更新客户设置KeyCustomer = 1其中Sales> 1000000.sql Server将处理像这样的命令,比您可以用ORM更快速度的1000倍.但是,由于@gbn已经正确地指出,除非您拥有一个充满强大sql编码器的团队,否则在短期内维护经常会夺取任何收益.
如果您必须插入大量记录,那么您应该通过SSIS来查看批量加载和/或ETL.这些API将使用更智能的算法,并且批量执行任何约束检查,而不是每次插入,这将为您提供卓越的性能提升.但是,管理SSIS包比点击应用中的按钮要好得多.这些都是您构建应用程序时需要考虑的设计决策.