gpt4 book ai didi

performance - MongoDB - 在数组中搜索是否与在普通键中搜索一样快?

转载 作者:IT老高 更新时间:2023-10-28 13:28:20 25 4
gpt4 key购买 nike

假设我有以下设计:

id | participant_ids
...| [ObjectId(...), ObjectId(...)]

现在我是这样查询的:

db.events.find({
participant_ids: ObjectId(...)
});

与此相同:

db.events.find({
participant_ids: {
$in: ObjectId(...)
}
});

我认为这两者之间的性能没有差异(但如果我错了,请纠正我!)。


每个事件至少有 1 名,最多 2 名参与者。所以我也可以使用以下设计:

id | participant_1_id | participant_2_id

...并像这样查询它...:

db.events.find({
$or: {
participant_1_id: ObjectId(...),
participant_2_id: ObjectId(...)
}
});

如果我不使用索引,这可能不会真正产生影响,但 - 当然 - 我是。

对于第一个设计,我会使用以下索引:

db.events.ensureIndex({
participant_ids: 1
});

对于第二个,我会选择这个:

db.events.ensureIndex({
participant_1_id: 1,
participant_2_id: 1
});

当您查看它们的表现时,两者都有缺点。

  • 第一个查询:使用 Array 可能比使用普通键慢。
  • 第二次查询:使用 $or-操作符不是很快。
  • 第二个查询: 不是很可扩展,比如说我想在某个时候释放参与者的限制,这是不可能的(你在$or-部分查询)。

我的问题是:- 我应该使用什么设计?- 我可以索引 Array 吗?文档对此没有任何说明,我不确定 Array 是否(因为它们的内容可能变化很大)。

最佳答案

1st query: Using an Array is probably slower than using a plain key.

我不这么认为。如果您有一个值(“plain key”)或多个(“Array”),它应该是完全相同的基于索引的访问路径。

participant_1_id,participant_2_id 太糟糕了。

关于performance - MongoDB - 在数组中搜索是否与在普通键中搜索一样快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7009375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com