【问题标题】:Performance Issue : Sql Views vs Linq For Decreasing Query Execution Time性能问题:用于减少查询执行时间的 Sql 视图与 Linq
【发布时间】:2016-05-24 09:53:54
【问题描述】:

我在 ASP.NET Webforms 中有一个系统设置,并且在某些特定情况下我需要获取所有接近 100 万条记录的记录生成表单。

一种解决方案可能是减少要获取的记录数量,但是当我们需要获取超过 5 年的记录时,时间记录是 50 万、100 万等等。我怎样才能减少它的时间?

我可以使用哪些积分来减少时间?我不能在这里显示完整的查询,这是一个大视图,其中调用了一些其他视图

如果我将其设计为 Linq 查询,是否需要更少的时间?这就是我问 Linq vs Views 的原因

我已经执行了一个“Select * from TableName”查询,它的 40 分钟和它仍在执行的表有 1,17,000 条记录我们可以缩短这个时间线

【问题讨论】:

  • 您有一个显示 100 万条记录的表单!?你必须有一个非常小的卷轴......谁需要一百万条记录?为什么不实现分页,只显示 25-50-100 组?开始认为这是一个用户体验问题。 Linq 将被评估为 sql。您应该评估您不想运行的查询并且查询 linq 正在生成。您可以专注于调整您的 sql 查询。你能提供执行计划吗?
  • 请以sqlplan格式提供您的查询和执行计划
  • @mxix 实际上我正在使用该查询生成报告 没有在 webform 的任何地方显示它。你想让我和你分享完整的查询吗
  • @Devart 实际上我正在使用该查询生成报告 没有在 webform 的任何地方显示它。你想让我和你分享完整的查询吗
  • 这是非常主观的,因为您没有提供有关您的查询的任何信息。

标签: sql .net sql-server linq views


【解决方案1】:

我最初是作为评论开始的,但空间不足。

使用服务器为您进行尽可能多的过滤,并尽可能少地返回行。客户端过滤总是比服务器端过滤慢得多。例如,它无法访问服务器上存在的索引和优化技术。

Linq 使用“惰性求值”,这意味着它构建了一种过滤方法,但在强制执行之前不会执行它。我使用过它,最初对它的速度印象深刻……直到我开始访问它返回的数据。当你从 Linq 使用你想要的数据时,这将触发实际的选择过程,你会发现这个过程很慢。

使用服务器返回一系列小的结果集,然后处理它们。如果您需要在一个键上加入这些结果集,请使用该键将它们保存到字典中,以便您可以快速加入它们。

另一种方法是查看 Entity Framework 来创建服务器数据库结构的镜像以及索引,以便可以快速连接您检索的数据子集。

【讨论】:

  • 实际上获取大量行是必须的。就像我们需要 5 年的记录一样。实际上我没有获取完整的数据集。我只获取记录的 Count()、支付金额的总和、其他费用的总和以及这些类型的记录。我不会像员工详细信息那样打印 5 年的所有记录。我只得到支付金额的总和和其他类型的聚合函数结果并将它们传递给报告
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
相关资源
最近更新 更多