簡體   English   中英

為什么 MongoDb 排序在查找集合中很慢

[英]Why MongoDb sort is slow with lookup collections

我的 mongodb 數據庫中有兩個集合,如下所示:

employee_details包含大約 330000 個文檔,其中有Department_id作為來自部門集合的參考

具有 2 個字段_iddept_name 的部門集合

我想通過使用lookup方法使用department_id作為外鍵加入上述兩個集合。 加入工作正常,但當我添加排序時,mongo 查詢執行需要很長時間。

注意:如果刪除排序對象或刪除查找方法,則執行速度很快。

我在不同的博客和 SO 中引用了幾篇文章,但沒有一個給出排序的解決方案。

我的查詢如下:

db.getCollection("employee_details").aggregate([
  {
    $lookup: {
      from: "departments",
      localField: "department_id",
      foreignField: "_id",
      as: "Department"
    }
  },
  { $unwind: { path: "$Department", preserveNullAndEmptyArrays: true } },
  { $sort: { employee_fname: -1 } },
  { $limit: 10 }
]);
 

有人可以提供一種方法使上述查詢立即生效,因為我的客戶無法在性能延遲上妥協。 我希望有一些方法可以解決性能問題,因為 nosql 旨在處理大型數據庫。

那里有可用的索引方法嗎? 這樣我就可以將它與我相同的集合結構一起使用。

提前致謝。

目前會為每個employee_details 進行查找,即330000 次,但如果我們在查找之前先進行排序和限制,則只有10 次。 這將大大減少查詢時間。

db.getCollection('employee_details').aggregate([
    {$sort      : {employee_fname: -1}},
    {$limit     :10},
    {
        $lookup : {
            from         : "departments",
            localField   : "department_id",
            foreignField : "_id",
            as           : "Department"
        }
    },
    { $unwind   : { path: "$Department", preserveNullAndEmptyArrays: true }},
]) 

嘗試之后,如果您甚至想減少響應時間,您可以在排序字段上定義一個索引

db.employee_details.createIndex( { employee_fname: -1 } )

暫無
暫無

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

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