簡體   English   中英

PetaPoco一對多映射性能

[英]PetaPoco one-to-many mapping performance

查看在PetaPoco幫助部分 -“一對多關系” 部分給出的示例

它描述了如何使用InnerJoin和映射器來處理一對多關系的數據映射...

var authors = db.Fetch<author, post, author>(
new AuthorPostRelator().MapIt,
"SELECT * FROM authors LEFT JOIN posts ON posts.author = authors.id ORDER BY posts.id"
);

這對於較小的表是很好的,但是對於大量數據,此數據的加載非常慢。

它不是“作者”,而是保持語言相同...

我的作者有30列。 我有90,000名作者,每個作者都有50個職位。

上面的查詢將減少4,500,000行數據...在該數據中,作者行被重復了50次...這有關系嗎?

有沒有一種更快地加載此數據的方法? 我是否錯過了任何地方的花樣?

考慮到很少有一次與一位以上的作者一起工作,我將僅使用以下格式為要求的作者獲取帖子:

 var author = db.SingleOrDefault<Author>("WHERE id= @0", authorId);
 if (author != null)
 {
     var posts= _db.Query<Post>("WHERE Id = @0 ", author.Id).ToList();
     author.Posts.AddRange(posts);
 }
 return author;

這樣,我避免了左聯接,並獲取了所需的作者帖子,而沒有任何性能損失。

這樣,您甚至可以通過以下方式在posts where子句中附加更多條件來限制返回的帖子:

 var posts= _db.Query<Post>("WHERE Id = @0 AND Cond1 = @1", author.Id, cond1).ToList();

您甚至可以通過定義所需列的模型並替換來限制作者返回的列數

var author = db.SingleOrDefault<Author>("WHERE id= @0", authorId);

var author = db.SingleOrDefault<AuthorModel>("WHERE id= @0", authorId);

暫無
暫無

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

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