簡體   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