繁体   English   中英

Mongo DB 聚合 $lookup 向所有文档缓慢添加索引?

[英]Mongo DB aggregate $lookup slow add index to all documents?

我的 Mongo DB 数据库中有两个 collections。 一般来说,我对 Mongo DB 还是很陌生。 我的每个集合都说现在有 1 个索引,来自 Laravel 和 SQL 数据库,我可以通过在我的列的迁移中添加带有->index()的索引来提高性能,我假设有一种方法可以做类似的事情对于我的 Mongo DB 文档和键/值字段。

我有两个 collections:

  • data_source_one(文档数量:5,300,文档总大小:1.2 MB)
  • data_source_two(文档数量:6,800,文档总大小:139.8 MB)

我正在使用$lookup(聚合)基于公共字段有效地对我的两个表进行连接,但与传统的 SQL 数据库不同,完成请求需要25 秒以上

我想知道如何通过将每个集合中的所有文档的索引添加到我的created_at键(自定义)和其他字段来从本质上提高性能?

const client = new MongoClient(process.env.DB_CONNECTION)
await client.connect()

const results = await client.db().collection('data_source_one').aggregate([{
  $lookup: {
    from: 'data_source_two',
    localField: 'created_at',
    foreignField: 'created_at',
    as: 'combined_results'
  }
}]).toArray();

是的,您可以在特定字段上使用索引来实现更高效的执行。 MongoDB 使用索引对其 collections 执行高效查询。 如果没有索引,MongoDB 必须执行集合扫描,即扫描集合中的每个文档,到 select 那些与查询语句匹配的文档。 如果查询存在适当的索引,MongoDB 可以使用该索引来限制它必须检查的文档数量。 您可以在此处查看文档。

在您的情况下,如果您基于一个公共字段连接两个表,您可以向该字段添加索引以实现更快的执行。 您可以在此处查看有关优化聚合管道的文档。 但是,它可能仍然不会像 SQL 中的 JOIN 语句那么快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM