有没有一种方法可以提高LINQ to SQL查询的获取性能,而该查询的总数却超过10万?我应该使用跳过还是合并将总数据分为5个部分?提取时,我的查询花费了40多分钟。
Dim query = From a In context.Orders
Join b In context.Status On a.OrderItem Equals b.OrderItem
Join c In context.Summary On a.OrderItem.Substring(0, 16) Equals c.OrderSuffix
Where Not (b.Status.Contains("E")) And a.Type = "AG" And a.OrderItem = b.OrderItem And a.OrderItem.Substring(0, 16) = c.OrderSuffix
Order By a.OrderItem.Substring(0, 16), a.Agn Ascending
Select a.OrderItem,
JobOr = a.auftrag_nr.Substring(0, 16),
Suffix = (a.auftrag_nr.Substring(0, 16).Substring(13)),
a.Agn,
a.Base,
b.Status,
a.Group,
a.Machine,
a.Article,
a.Height,
a.Sol, c.plan, a.DatePlanned
答案 0 :(得分:-1)
实际上,您进行了很大的联接,然后进行过滤。
如果您有一个类似a.type =“ AG”的过滤器,那么在加入之前就应该应用它,这样甚至不会生成很多不必要的加入结果。
另一个适合您的想法: 编写linq查询的另一种方式。 喜欢:
dim foo as IQueryable(Of TypeInYourTable) = yourDBContext.yourTable.where(function(v) v.a = ...).SomeOtherLinqFunctions...
这样,您可以为每个表建立可查询对象并首先对其进行过滤(例如a.type =“ AG”),然后可以使用.Join(...)函数并进行适当的联接,您不只是比较两个数据集的一对值。
请注意,只要Queryable是Queryable,就不会对数据库进行任何调用。您需要致电例如.ToArray()或.ToList()或...强制执行调用。 如果不这样做,则返回一个Queryable,然后关闭它的上下文,然后尝试获取Queryable的结果,您将获得运行时异常。