SQL vs LINQ性能

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的有效方法.但是你总会得到这样的模式:

  1. 从数据库中获取数据
  2. 使用Linq修改数据
  3. 提交对数据库的更改.

如果您可以在插入中使用任何逻辑,则可以使用set logic在SQL中进行更新.例如,更新客户设置KeyCustomer = 1其中Sales> 1000000.SQL Server将处理这样的命令,比您使用ORM的速度快1000倍.然而,正如@gbn已经正确指出的那样,除非你有一个充满强大SQL编码器的团队,否则维护通常会在短期内超过任何性能增益.

如果您必须插入大量记录,那么您应该通过SSIS查看批量加载和/或ETL.这些API将使用更智能的算法并批量执行任何约束检查,而不是每个插入,这将为您提供出色的性能提升.但是,管理SSIS包比单击应用程序中的按钮要多得多.这些都是您在构建应用程序时需要考虑的设计决策.

  • 你可以说你需要一个充满强大的Linq开发人员的团队 - 或者他们最终可能会写一些可怕的linq查询.道德是:如果你正在做数据库工作,那就学习SQL.Linq是一种便利,而不是替代品. (12认同)