【问题标题】:SQL vs LINQ performance [closed]SQL与LINQ性能[关闭]
【发布时间】:2012-10-20 18:44:32
【问题描述】:

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

我必须构建一个软件,在数据库中为大约 150 个 excel 模板批量加载元数据(包含单元格位置、单元格类型、格式等信息)。

我可以操作

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

  • 通过在内存中构建对象,使用 LINQ 查询对其进行处理以进行各种完整性检查,然后将修改提交到 DB

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

详细来说,SQL 查询比 LINQ 查询快多少(假设所有需要的数据都已被 ORM 加载到内存中)

【问题讨论】:

  • 和你的问题有点关系:martinfowler.com/articles/dblogic.html
  • 速度有那么重要吗?在几乎所有情况下,易于维护都应该胜过绝对性能
  • 特别是在进行连接和有些复杂的查询时,我想 SQL 应该以毫秒为单位返回,而 LINQ 不是... SQL 有索引,而 LINQ 没有。
  • @gbn 是的,速度很重要。这是一个非常大的负载过程,最坏的情况应该是 10-20 分钟结束!
  • @Teejay:如果您已经有非常大的数据集,请尝试使用更快的PLINQ

标签: sql performance linq


【解决方案1】:

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

其次,您是否需要对数据的多个列进行交叉检查和/或完整性检查。我曾经遇到过这样的情况:添加索引和重建表将插入时间从几分钟缩短到几毫秒,这仅仅是由于碎片错误和缺乏算法。

Linq 是一种为插入和修改逻辑生成 SQL 的有效方法。但是,您将始终以模式结束:

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

如果您有任何可以在插入中利用的逻辑,则可以使用集合逻辑在 SQL 中进行更新。例如。更新客户设置 KeyCustomer = 1,其中销售额 > 1000000。SQL Server 处理这样的命令的速度比使用 ORM 执行的速度快 1000 倍。然而,正如@gbn 已经正确指出的那样,除非您拥有一支由强大的 SQL 编码人员组成的团队,否则维护通常会在短期内胜过任何性能提升。

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

【讨论】:

  • 您可以说您也需要一个由强大的 Linq 开发人员组成的团队 - 或者他们最终可能会编写一些可怕的 linq 查询。寓意是:如果您从事数据库工作,请学习 SQL。 Linq 是一种便利,而不是替代品。
【解决方案2】:

这里有各种 ORM 和SqlDataReader 之间的一些性能比较:http://code.google.com/p/dapper-dot-net/(性能部分)。值得一提的是,编译 LINQ 查询可能会显着提高性能:http://www.codeproject.com/Articles/38174/How-to-improve-your-LINQ-query-performance-by-5-X

【讨论】:

  • 感谢您的回答。您的文章似乎更多地提到了我没有使用的 LINQ 2 SQL。我问的是已经加载数据时的纯查询性能。
猜你喜欢
  • 2010-11-05
  • 1970-01-01
  • 2021-11-06
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 2013-12-01
  • 2011-11-07
相关资源
最近更新 更多