簡體   English   中英

如何優化此Linq查詢

[英]How to optimize this Linq query

我正在嘗試優化此查詢。 現在還不算慢,但是我希望在不久的將來會出現一個高峰。 我還能做些什么來使此查詢更快?

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
                                    }
                        };

一般而言,您可以考慮緩存該信息,但是對於查詢而言,本質上沒有什么“慢”的。 這實際上取決於查詢的使用方式(頻率,命中什么數據等)。 對於給定的問題,有很多可能的優化解決方案,盡管您可能會根據直覺找到改進,但是如果有適當的概要分析工具來確定問題區域,則可以輕松得多。 另外,您將滿意地證明,您所改進的領域值得您投入時間。

此查詢可能的優化方式是,僅加載其他相關對象(UserInfo,Category,Tag)的ID,並僅使用延遲加載策略按需初始化此對象。 或執行其他查詢來解析這些對象。

但這取決於如何使用查詢結果。 可能您需要相關對象的所有信息,或者只需要這些對象的某些信息,或者對象的ID足夠,因為您需要ID來進行其他查詢。

我可以使LINQ 更加整潔 (通過使用關聯而不是psuedo-joins ),但是它不會使它更快。 為了使其更快,您可能需要查看數據庫索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM