【发布时间】:2010-09-22 18:21:06
【问题描述】:
我已经在数据库中创建了一个视图,它为我提供了一个组织结构在这个时间点的表示。事实上,我在这个视图中使用了 getdate()。我已经在我的 edmx 中导入了该视图,并根据该视图编写了查询。大多数查询将表与视图连接起来并返回 DTO。当我在 SQL 分析器中对它们进行分析时,这些查询工作正常并且速度很快(200 毫秒)。
当我对连接的表和视图进行分组时,持续时间要长得多。奇怪的是,当我执行 LinQ 查询时,持续时间很长,但是当我自己在 SQL Server Management Studio 中执行生成的查询时,它真的很快。我已经确定这不是由已经计算过的缓存或执行计划引起的。 LinQ 查询也给了我很多读取和写入,而通过 SQL Mgmt Studio 的查询给我没有写入和更少的读取。
我们假设在通过 LinQ 执行查询而不是通过 SQL Mgmt Studio 执行查询时需要重新计算视图。
我尝试过的另一种方法是在数据库中创建一个存储过程。此存储过程执行与 LinQ 生成的查询完全相同的查询。我已经在 edmx 中映射了这个存储的过程。当我再次通过 LinQ 调用存储过程时,持续时间很长(7000 毫秒)并且有很多读写操作。当我通过 SQL Mgmt Studio 执行它时,持续时间与预期一致(200 毫秒)并且读取很少,没有写入。
有什么建议吗? 谢谢
【问题讨论】:
-
您必须向任何人提供更多信息才能对此发表任何看法。例如:视图看起来如何?您的 LINQ 查询看起来如何?执行的 SQL 是怎样的?
标签: linq performance view entity-framework-4