当我在SQL Server Management Studio中执行我的存储过程时,它会在不到1秒的时间内返回结果,但是当我尝试通过LINQ和此代码加载数据时,最多需要5秒钟。有什么快速建议吗?
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.SP_SELECT_MyData")]
public ISingleResult<SP_SELECT_MyDataResult> SP_SELECT_MyData([global::System.Data.Linq.Mapping.ParameterAttribute(DbType="VarChar(50)")] string bname)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), bname);
return ((ISingleResult<SP_SELECT_MyDataResult>)(result.ReturnValue));
}
此行一直占用
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), bname);
答案 0 :(得分:2)
感谢@Ulugbek Umirov提供link to good answer
这是由缓存中的BAD执行计划导致不使用索引引起的。通过在存储过程中使用WITH RECOMPILE
来创建索引和禁用缓存选项可以大大提高性能。
通过使用全文搜索索引改进过滤选项进一步改进完善,因为像LIKE '%abc%'
两侧的野生字符的运算符不能使用非聚簇索引,但全文搜索索引可以。
答案 1 :(得分:1)
我会评论,但还没有足够的声誉。
第二次运行得更快吗?如果是这样,那么您所描述的声音可以通过使用编译查询来解决,但根据这篇文章,编译的查询不适用于存储过程:http://aspguy.wordpress.com/2008/08/15/speed-up-linq-to-sql-with-compiled-linq-queries/
您可以在linq中编写查询并使用已编译的查询,还是必须在sproc中?