优化长时间linq表达式

时间:2012-07-10 05:26:30

标签: asp.net-mvc-3 linq-to-entities

我在mv3-entity项目中有这个linq表达式

    SubCatNews = (from c in context.NewsInSubCats
      where
      (c.SubCat.Visible == true &&
          c.SubCatNews.Visible == true &&
          c.SubCatNews.StatusID == 1 &&
          c.SubCatNews.NewsTypeID != 5 &&
          (c.SubCatID == catId || c.SubCat.ParentId == catId))
orderby c.SubCatNews.SubCatNewsID descending
      select c.SubCatNews)
.Distinct()
.OrderByDescending(p => p.SubCatNewsID)
.Skip(pageIndex * pageSize)
.Take(pageSize);

我在SubCatNews表中有23000条记录(我的新闻)

这些记录,使用NewsInSubCats表将组关联到新闻

和组在SubCat表中

这个工作,但是从sql server获取proccess很长时间执行并在大多数时间从sql server返回Timeout Exeption

我在具有2 GB RAM的虚拟专用服务器中托管了具有此结构的3个站点

这是Linq表达式优化吗?

或者我必须在sql server中使用索引

感谢名单

1 个答案:

答案 0 :(得分:0)

我会建议。在sql server上创建一个索引并编写一个存储过程并传递所有必需的参数(包括pageindex和pagesize),并在SQL端进行过滤并仅返回所需的数据。

要创建商店程序,您可以查看以下网址。

http://weblogs.sqlteam.com/randyp/archive/2005/06/23/6335.aspx

http://msdn.microsoft.com/en-us/magazine/gg650669.aspx

http://basquang.wordpress.com/2011/03/18/stored-procedures-paging-solution-in-asp-net-mvc-2/