我在我的MVC应用程序中有一个查询,大约需要20秒才能完成(使用NHibernate 3.1)。当我在Management studio上手动执行查询时,需要0秒。
我已经看到类似于这个问题的类似问题,所以我进一步考虑了我的测试。
我使用Sql Server Profiler拦截了查询,并在我的应用程序中使用ADO.NET执行了查询。
我从Profiler获得的查询类似于:“exec sp_executesql N'select ....”
我的ADO.NET代码:
SqlConnection conn = (SqlConnection) NHibernateManager.Current.Connection;
var query = @"<query from profiler...>";
var cmd = new SqlCommand(query, conn);
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return RedirectToAction("Index");
此查询也非常快,没有时间执行。
另外,我在Profiler上看到了一些非常奇怪的东西。从NH执行时,查询具有以下统计信息:
读取:281702 写道:0
来自ADO.NET的那个:
读:333 写道:0
有人有任何线索吗?我可以提供任何信息来帮助诊断问题吗?
我认为它可能与某些连接设置有关,但ADO.NET版本使用的是NHibernate的相同连接。
提前致谢
更新:
我正在使用NHibernate LINQ。查询是巨大的,但是是一个分页查询,只提取了10条记录。
传递给“exec sp_executesql”的参数是:
@ p0 int,@ p1 datetime,@ p2 datetime,@ p3 bit,@ p4 int,@ p5 int
@ p0 = 10,@ p1 ='2009-12-01 00:00:00',@ p2 ='2009-12-31 23:59:59',@ p3 = 0,@ p4 = 1,@ p5 = 0