假设:
- 所有数据和索引都在RAM中。
第一次查询:
{
$in: [user_id, array_of_user_ids_with_length_1000]
}
第二次查询:
{
$lookup: {
from: "col_b",
localField: "_id",
foreignField: "user_id",
as: "joined_field"
}
}
where col_b has 10B documents and is indexed, uniquely, on "user_id".
我的理由是:
第二查询应该更快,因为第一查询中的$in
操作将具有O(1000)的最坏情况时间复杂度,而第二查询的最坏情况时间复杂度是O(log(10B))= O(23)。
我的理由正确吗?第二个查询真的会比第一个查询快吗?如果不是,我错在哪里?在实践中,我们能期望这在真实数据、硬件、RAM、用例等方面都是如此吗?
1条答案
按热度按时间km0tfn4u1#
$lookup
用于连接来自其他集合的数据,$in
用于在单个集合中查找相似的数据组,这完全取决于您的用例。