[英]Why MongoDb sort is slow with lookup collections
我的 mongodb 數據庫中有兩個集合,如下所示:
employee_details包含大約 330000 個文檔,其中有Department_id作為來自部門集合的參考
具有 2 個字段_id和dept_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.