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