5

我目前正在使用 Microsoft Enterprise Library Data Access 5.0 来执行存储过程。

Database myDatabase = DatabaseFactory.CreateDatabase();
using (DbCommand command = myDatabase.GetStoredProcCommand("myStoredProc"))
{
   //Add parameters here
   using (IDataReader dataReader = myDatabase.ExecuteReader(command))
   {
      while (dataReader.Read())
      {
      }
   }
}

一切正常,但是需要很长时间才能运行。当我打开 SQL Profiler 时,我可以看到存储过程大约需要 50 秒才能运行。但是,如果我从 Profiler 中获取相同的脚本并在 SQL Management Studio 中运行它,则只需大约 480 毫秒即可返回所有行。

有没有人遇到过这个问题?为什么会有很大的不同?

4

2 回答 2

1

很容易被参数嗅探

于 2013-02-28T23:39:19.447 回答
0

尝试将您的字符串参数类型更改为DbType.AnsiString,看看是否有帮助。
问题可能是,如果数据库列是 varchar(...) 并且具有索引并且与该列匹配的参数是 nvarchar(...) 则 SQL Server 会忽略索引并执行表扫描。解决方案是强制参数键入 AnsiString,以便 SQL Server 使用索引。

于 2013-03-01T07:36:31.443 回答