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