存储过程是在实体框架慢(Stored procedure is slow in Entity Fra

2019-09-23 09:45发布

我使用下面的查询调用从实体框架的存储过程(即返回数据)

from sp in db.GetSale(bID, SID,m,y).Where(x => x.isActive == true)
select sp

如果我直接运行这个程序,只需要2秒,但是当我通过EF调用这个存储过程,它需要10〜15秒。

任何指导,以改善这种情况? 我在这里看到的其他职位上的SO,但没有成功

编辑

这里是sqlplan我的程序https://skydrive.live.com/redir?resid=87DCBD5D3E9AAA57!374

Answer 1:

我怀疑参数嗅探。

尝试应用抗参数在你的程序嗅探代码。 (指定使用它们之前的参数局部变量)。

http://blogs.technet.com/b/mdegre/archive/2012/03/19/what-is-parameter-sniffing.aspx



Answer 2:

记住,你的.Where(x => x.isActive == true)过滤器不会应用到程序本身。 当你正在处理表,过滤器被传递到where子句和数据库执行。 在你的情况下,PROC将要执行(不活跃的条款)时,整个结果集将返回给应用程序和后where将被应用。

我知道你说的PROC速度较快,但你确定你是不是在某种程度上传递isActive = TRUE作为参数传递给它?

我看你已经对这个PROC参数,所以也许如果添加的地位,另一个参数,并在查询级别应用它,它会提高你的表现。



文章来源: Stored procedure is slow in Entity Framework