我使用下面的查询调用从实体框架的存储过程(即返回数据)
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
我怀疑参数嗅探。
尝试应用抗参数在你的程序嗅探代码。 (指定使用它们之前的参数局部变量)。
http://blogs.technet.com/b/mdegre/archive/2012/03/19/what-is-parameter-sniffing.aspx
记住,你的.Where(x => x.isActive == true)
过滤器不会应用到程序本身。 当你正在处理表,过滤器被传递到where子句和数据库执行。 在你的情况下,PROC将要执行(不活跃的条款)时,整个结果集将返回给应用程序和后where
将被应用。
我知道你说的PROC速度较快,但你确定你是不是在某种程度上传递isActive = TRUE作为参数传递给它?
我看你已经对这个PROC参数,所以也许如果添加的地位,另一个参数,并在查询级别应用它,它会提高你的表现。