2010-06-02 102 views
0

我正试图优化此查询。现在速度并不慢,但我预计在不久的将来会出现一次高峰。还有什么我可以做,使这个查询更快?如何优化此Linq查询

var posts = from p in context.post 
         where p.post_isdeleted == false && p.post_parentid == null 
         select new 
         { 
          p.post_date, 
          p.post_id, 
          p.post_titleslug, 
          p.post_title, 
          p.post_descriptionrender, 
          p.userinfo.user_username, 
          p.userinfo.user_userid, 
          p.userinfo.user_GravatarHash, 
          p.userinfo.user_points, 
          p.category.catid, 
          p.category.name, 
          p.post_answercount, 
          p.post_hasbestanswer, 
          p.post_hits, 
          p.post_isanonymous, 
          p.post_votecount, 
          FavoriteCount = context.favorites.Where(x => x.post.post_id == p.post_id).Count(), 
          tags = from tg in context.posttag 
            where tg.posttag_postid == p.post_id 
            select new 
            { 
             tg.tag.tag_id, 
             tg.tag.tag_title 
            } 
         }; 
+0

您不需要将'p.post_isdeleted'与'false'进行比较。只要写'!p.post_isdeleted' – Amsakanna 2010-06-02 06:07:10

回答

0

从一般意义上讲,您可以考虑缓存该信息,但没有任何内容对于查询是“慢”的。这将取决于查询的使用方式(多长时间一次,有哪些数据正在被击中等)。对于给定的问题,有许多可能的优化解决方案,尽管您可能会发现基于直觉的改进,但如果您有适当的分析工具来确定问题区域,那么您将可以更轻松地完成此任务。此外,您将满意地证明您所提升的领域值得您投入时间。

0

对于这个查询,可能的优化只是加载其他相关对象(UserInfo,Category,Tag)的Id,并且仅在需要时使用延迟加载策略初始化这些对象。或者执行其他查询来解析这些对象。

但它取决于你如何使用查询的结果。也许你需要所有相关对象的信息,或者你只需​​要这些对象的一些信息,或者对象的Id就足够了,因为你需要其他查询的Id。