我的数据库中有一个表,其中有一个日期字段(VisitDate
)。当我执行以下SQL查询时,我会在 1秒:
select year(VisitDate), month(visitDate)
from GABrowser
group by year(VisitDate), month(visitDate)
但是,在我的ASP.Net代码(在Visual Basic中)中,以下操作需要12秒才能执行:
Dim stats = db.GABrowsers.GroupBy(Function(s) New With {s.VisitDate.Value.Year, s.VisitDate.Value.Month})
'(Takes 12 seconds to enter in the For loop)
For Each stat In stats
Next
我不知道为什么需要这么长时间。它导致我的网页加载速度非常慢。
答案 0 :(得分:3)
SQL查询和LINQ查询不等效。
SQL查询仅返回year(VisitDate)
和month(visitDate)
。 LINQ中的GroupBy
不同,它返回按分组条件分组的完整实体。
在LINQ结果中,您会看到db.GABrowsers
和s.VisitDate.Value.Year
组中的s.VisitDate.Value.Month
个实体。您将看到LINQ语句生成的SQL查询比第一个SQL查询宽得多(在字段中)。
除此之外(更大的SQL结果集),EF需要时间来处理数据库中的数据并实现实体对象。