这很奇怪。一段串联的代码
using(SqlConnection
{//open connection
using(SqlCommand
{//Specified parameters and SP name
using(SqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
// Parse it and return an object.
return new MyObject
{
prop1 = (int)reader["column1"]
...
propN=reader["columnn"].ToString()
}
可能需要3分钟才能执行,而从Management Studio执行相同的SP会在不到一秒的时间内运行!
此代码在另一台服务器上运行。我还发现,如果从代码执行,Sql Profiler会报告数百万次读取,而在Studio中执行则会读取少于5000次读取。
我不知道为什么会这样。任何帮助表示赞赏。 附: Isn的执行计划是否绑定到SP意味着客户端用于运行它没有区别?
答案 0 :(得分:0)
这不是一个真正的答案,但至少它解决了它;) 运行SQL分析器并捕获执行计划(由David暗示),我发现它们对于第一个和第二个场景有所不同。 我假设统计/指数可能存在问题 - 优化者的选择非常差。重建索引解决了问题,并且两种方式彼此接近(及时)。因此,如果您遇到这种情况 - 检查索引碎片和上次更新的统计信息。