Mongodb LookUp Poor Performance


var product = db.GetCollection<Product>("Product");
var lookup1 = new BsonDocument(
"$lookup", 
new BsonDocument { 
{ "from", "Variant" }, 
{ "localField", "Maincode" }, 
{ "foreignField", "Maincode" }, 
{ "as", "variants" } 
}
);
var pipeline = new[] { lookup1};
var result = product.Aggregate<Product>(pipeline).ToList();

集合a的数据非常大,所以我需要30秒才能将数据放入列表中。我应该做些什么来加快查找速度?

该查询所做的是从Product集合中检索每个文档,然后对于找到的每个文档,在Variant集合中执行查找查询。如果Variant集合中的Maincode字段上没有索引,它将读取每个文档的整个集合。

这意味着,如果总共有1000个产品,总共有3000个变体(平均每个产品3个),这个查询将从Product读取所有1000个文档,如果该索引不在那里,它将从Variant读取所有3000个文档1000次,即它将检查300万个文档。

一些可能加快速度的方法:

  • Variant集合的{Maincode:1}上创建索引这将减少为完成查找
  • 而必须读取的文档数量。
  • 更改模式如果变体与产品存储在同一文档中,则不需要查找
  • 在查找之前过滤产品同样,减少查找
  • 期间读取的文档
  • 使用游标批量检索文档如果您先执行任何必要的排序,然后再执行查找,那么您可以分批地将文档返回给应用程序,这将允许应用程序在第二批可用之前显示或开始处理第一批。这不会使查询本身更快,但它可以减少应用程序中的感知等待。

最新更新