首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB -在数组中的搜索速度和在普通键中的搜索速度一样快吗?

MongoDB -在数组中的搜索速度和在普通键中的搜索速度一样快吗?
EN

Stack Overflow用户
提问于 2011-08-10 10:31:05
回答 1查看 1.7K关注 0票数 6

假设我有以下设计:

代码语言:javascript
复制
id | participant_ids
...| [ObjectId(...), ObjectId(...)]

现在我用这种方式来查询:

代码语言:javascript
复制
db.events.find({
    participant_ids: ObjectId(...)
});

与此相同的是:

代码语言:javascript
复制
db.events.find({
    participant_ids: {
        $in: ObjectId(...)
    }
});

我想这两者在性能上没有什么区别(但如果我错了,请纠正我!)

每个活动至少有1人,最多2人。因此,我还可以使用以下设计:

代码语言:javascript
复制
id | participant_1_id | participant_2_id

..。然后像这样查询.

代码语言:javascript
复制
db.events.find({
    $or: {
        participant_1_id: ObjectId(...),
        participant_2_id: ObjectId(...)
    }
});

如果我不使用索引,这可能并没有什么真正的区别,但是-of课程-我是

对于第一种设计,我将采用以下指标:

代码语言:javascript
复制
db.events.ensureIndex({
    participant_ids: 1
});

对于第二个问题,我将这样说:

代码语言:javascript
复制
db.events.ensureIndex({
    participant_1_id: 1,
    participant_2_id: 1
});

当你看他们的表现时,他们都有缺点。

  • 1st查询:使用Array可能比使用普通的Array查询慢:使用$or-operator的不是很好的fast.
  • 2nd查询:不是很可伸缩的,比如我想在某个时候释放参与者的限制,这是不可能的(查询的$or-part中有无限的密钥和无限的项)。

我的问题是:-我应该使用什么设计?-我可以索引Arrays吗?文档没有提到这一点,我也不确定Array是什么(因为它们的内容可能有很大的变化)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-10 10:37:24

第一次查询:使用数组可能比使用普通键慢。

我不这样认为。如果有一个值(“普通键”)或多个值("Array"),则应该是完全相同的基于索引的访问路径。

participant_1_id, participant_2_id太可怕了。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7009375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档