[英]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.