【发布时间】:2016-01-18 13:30:27
【问题描述】:
这是场景:
- 我们在 SQL Server 数据库中有一个视图
- 一个 C# MVC(带有实体框架)应用程序正在不同的服务器中运行,并且正在使用此视图。它工作正常,当从 App 层请求数据时运行速度很快,并在不到 2 秒的时间内呈现出来。
- 从我的本地计算机上,我运行 SQL Server 管理控制台,并尝试在视图上执行完全相同的查询,它需要 45 秒!!!!!!
为什么 SQL Server 需要很长时间才能呈现数据?是应用服务器中的EF缓存数据吗?
更多信息:两种情况下的数据库/实例相同。一切都在 VMWare 基础架构之上。
MVC 中的代码:
using (var planning = new PlanningEntities())
{
this._vwFolderDetailsInstance =
(from m in planning.vwFolderDetails
where m.Id == id
select m).FirstOrDefault<vwFolderDetail>();
}
短信查询窗口中的代码
select * from dbo.vwFolderDetail
where ID = (3831)
【问题讨论】:
-
您是否在两种情况下都针对相同的硬件/服务器执行查询?
-
是的,相同的数据库/实例和相同的机器。谢谢
-
您愿意分享查询本身以及如何从 EF 执行它吗?
-
如果你运行
select ID ... from dbo.vwFolderDetail where ID = (3831)会发生什么?它跑得更快吗?此外,EF 不会像您在 SSMS 中编写的那样创建漂亮的查询,启动 SQL 分析器并查看您是否可以跟踪 EF 调用(它可能是列表中最丑陋的 SQL 语句,大量嵌套查询等)然后从 SSMS 运行它以查看它的作用。之后检查每个的执行计划,看看有什么区别...... -
查询计划(大多数)可能不同。请参阅dba.stackexchange.com/q/9840/10825 和链接文章
标签: c# sql-server asp.net-mvc entity-framework