SQL与LINQ性能比较

24

我们目前有一个自制的实体框架,它依赖于独立于数据库的ORM。

我需要构建一个软件,将大约150个Excel模板的元数据批量加载到数据库中(包括有关单元格位置、单元格类型、格式等信息)。

我可以通过以下方式进行操作:

  • 通过SQL批处理(速度更快但交互性较差)

  • 通过在内存中构建对象,使用LINQ查询进行各种完整性检查,然后提交修改到数据库

我知道SQL绝对更快,但我想知道...它有多快?

具体来说,假设ORM已经将所有所需数据加载到内存中,SQL查询比LINQ查询快多少?


1
与您的问题有些相关:http://www.martinfowler.com/articles/dblogic.html - Habib
速度真的那么重要吗?在几乎所有情况下,易于维护应该优先于绝对性能。 - gbn
1
特别是在执行连接和较为复杂的查询时,SQL应该能够在毫秒级别内返回结果,而LINQ则不一定。SQL具有索引功能,而LINQ则没有。 - Teejay
@gbn 是的,速度非常重要。这是一个非常大的负载过程,最坏的情况下应该在10-20分钟内结束! - Teejay
2
@Teejay:如果你已经有非常大的数据集存在,尝试使用PLINQ,它会更快。 - huMpty duMpty
显示剩余3条评论
2个回答

19

在大多数情况下,linq或SQL并不是问题的关键。您的性能将与您插入的数据量、当前表中的数据量以及您正在维护的索引相关。

其次,您是否需要在数据的多个列之间进行交叉检查和/或完整性检查。我遇到过这样的情况:添加索引并重建表格仅由于糟糕的碎片化和缺乏算法,插入时间从几分钟降至毫秒。

Linq是生成插入和修改逻辑的SQL的有效方法。但是,您总会得到以下模式:

  1. 从数据库获取数据
  2. 使用Linq修改数据
  3. 提交更改到数据库。

如果您在插入中有任何逻辑可以利用,则可以使用集合逻辑来执行SQL中的更新。例如:Update Customers Set KeyCustomer = 1 where Sales > 1000000. SQL Server将处理此类命令比ORM快上千倍。然而,正如@gbn已经正确指出的那样,除非您拥有一支强大的SQL编码团队,在短期内维护通常会胜过任何性能增益。

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


12
你可以说你需要一支由强大的Linq开发人员组成的团队,否则他们可能会编写糟糕的Linq查询。这告诉我们,如果你在进行数据库工作,学习SQL是必要的,Linq只是一个方便的工具而不是替代品。 - gbjbaanb

1

谢谢您的回答。看起来您的文章更多地涉及LINQ 2 SQL,而我并没有使用它。我在询问数据已经加载时的纯查询性能。 - Teejay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接