gpt4 book ai didi

c# - Entity Framework Skip 方法运行速度很慢

转载 作者:太空狗 更新时间:2023-10-29 20:36:46 25 4
gpt4 key购买 nike

我在数据访问层上使用 Entity Framework 5、ObjectContext 和 POCO。我有一个通用的存储库实现,我有一个使用 Skip() 和 Take() 通过分页查询数据库的方法。一切正常,除了跳过很多行时查询性能非常慢(我说的是 170k 行)

这是我对 Linq to Entities 查询的摘录:

C#代码:

ObjectContext oc = TheOBJEntitiesFactory.CreateOBJEntitiesContext(connection);
var idPred = oc.CreateObjectSet<view_Trans>("view_Trans").AsQueryable();
idPred = idPred.OrderBy(sortColumn, sortDirection.ToLower().Equals("desc"));
var result = idPred.Skip(iDisplayStart).Take(iDisplayLength);
return new PagedResult<view_Trans>(result, totalRecords);

在转换为 Transact-SQL 的查询中,我注意到不是直接在 View 中使用 ROW_NUMBER() 子句,而是进行子查询并应用 ROW_NUMBER() 到子查询的结果...

例子:

select top(10) extent1.A, extent1.B.extent1.C from (
select extent1.A, extent1.B, extent1.C,
row_number() OVER (ORDER BY [Extent1].[A] DESC) AS [row_number]
from (
select A,B,C from table as extent1)) as extent1
WHERE [Extent1].[row_number] > 176610
ORDER BY [Extent1].[A] DESC

这大约需要 165 秒才能完成。关于如何提高翻译查询语句的性能有什么想法吗?

最佳答案

对于那些不遵循上述评论的人,我怀疑问题不是额外的 SELECT,因为这个额外的 SELECT 出现在很多很多 EF 查询中,而这些查询并不需要 165 秒才能运行。我最终注意到他的 ObjectSet 引用了一个 VIEW 并想知道这是否是问题的一部分。经过一些实验后,他将问题缩小到 View 内的 LEFT JOIN。我建议他对该查询运行数据库调优顾问;他做到了,这两个索引建议解决了这个问题。

关于c# - Entity Framework Skip 方法运行速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16401218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com