【问题标题】:Efficiency of linq to sql vs stored procedurelinq to sql 与存储过程的效率
【发布时间】:2011-03-24 01:41:50
【问题描述】:

您好,我正在编写一个具有搜索页面并在数据库中进行搜索的应用程序。

我想知道是否应该在 linq 或存储过程中执行此操作。

存储过程的性能是不是比linq to sql好很多?

我想这是因为为了编写 linq 查询,您需要使用 datacontext 来访问要查询的表。我想象这本身意味着如果桌子很大,它可能会变得低效。

如果你使用的是:

context.GetTable<T>();

有人可以在这里给我建议吗?

【问题讨论】:

  • Linq 并没有那么快,除非你有一些技巧,看看这个stackoverflow.com/questions/2363735/…
  • 也阅读了这篇文章peterkellner.net/2009/05/06/…
  • “Linq 很慢”的说法是完全错误的。
  • @Mitch 我改变了它 - 好吧我仍然想知道 Linq ......真的,有很多支持它,所以我可能错了。我真的有 linq 的速度问题。所以我仍在寻找原因。

标签: c# asp.net linq-to-sql


【解决方案1】:

除非遇到 Linq to SQL 生成的 TSQL 不是最优的情况,否则差别不大。

如果您想对 TSQL 进行绝对控制,请使用存储过程。

如果速度很关键,请对两者进行基准测试并检查您的 Linq to SQL 解决方案生成的 TSQL。

此外,您应该警惕在任一解决方案中通过网络拉回整个表(除非它们很小,例如经常访问的查找数据)。

【讨论】:

  • 不会使用 GetTable() 意味着它将拉回整个表以进行查询,而如果使用存储过程,则只有与查询匹配的值将被拉回。 IE。如果表有 2000 条记录,即使查询只产生一个值,也会将它们全部拉回。而存储过程会拉回一个值?
  • @Coder 2:通常,您显然希望在数据库中进行过滤,而不是通过网络传输数据。 Linq2Sql 也可以做到这一点。
  • 好的,谢谢您的回答。您能告诉我,我需要设置它来执行此操作还是自动执行此操作?
  • 另外请记住,存储过程可以由 Microsoft SQL Server 等引擎编译,从而提供巨大的性能提升。
  • @Matt Bishop :这不再是真的:SQL Server 也会缓存 ad-hoc sql 的查询计划。
【解决方案2】:

如果速度对您来说如此重要,那么您应该继续在一组合理的数据上对这两个选项进行基准测试。从技术上讲,我希望 SP 更快,但可能差别不大。

【讨论】:

    【解决方案3】:

    “高效”对您意味着什么?

    我正在开发一个以亚秒(最好是 500 毫秒)为目标的网站。我们使用 Linq 搜索我们的大部分内容。我们真正使用 SP 的唯一一次是使用 hierarchyid 和其他 EF 中不存在的 SqlServer 数据类型。

    【讨论】:

    • -1:Taylor:他说的是 LINQ to SQL,而不是实体框架。
    • +1 返回,因为答案的有效性与 OP 使用 LINQ to SQL 还是 EF 无关。
    【解决方案4】:

    GetTable 可能不会在两者之间有那么大的不同,因为基本上它只是 SELECT * FROM T。如果 Linq 没有以最佳方式编写查询,您将看到存储过程的更大收益,或者在某些负载非常高的情况下,缓存执行计划会产生影响。

    对其进行基准测试是最好的答案,但从你所做的事情来看,我认为差异不会太大。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多