SQL脚本需要很长时间才能运行

时间:2013-02-28 22:47:16

标签: c# sql enterprise-library

我目前正在使用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事件探查器时,我可以看到存储过程大约需要50秒才能运行。但是,如果我从Profiler中获取相同的脚本并在SQL Management Studio中运行它,则返回所有行只需要大约480毫秒。

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

2 个答案:

答案 0 :(得分:1)

很容易成为Parameter Sniffing

答案 1 :(得分:0)

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