els*_*ooo 6 indexing performance mongodb
说我有以下设计:
id | participant_ids
...| [ObjectId(...), ObjectId(...)]
Run Code Online (Sandbox Code Playgroud)
现在我以这种方式查询它:
db.events.find({
participant_ids: ObjectId(...)
});
Run Code Online (Sandbox Code Playgroud)
与此相同:
db.events.find({
participant_ids: {
$in: ObjectId(...)
}
});
Run Code Online (Sandbox Code Playgroud)
我假设这两者之间的表现没有差别(但如果我错了,请纠正我!).
对于每个活动,至少有1个参与者,最多2个参与者.所以我也可以使用以下设计:
id | participant_1_id | participant_2_id
Run Code Online (Sandbox Code Playgroud)
...并像这样查询...:
db.events.find({
$or: {
participant_1_id: ObjectId(...),
participant_2_id: ObjectId(...)
}
});
Run Code Online (Sandbox Code Playgroud)
如果我不使用索引,这可能并没有真正有所作为,但是 - 当然 - 我是.
对于第一个设计,我使用以下索引:
db.events.ensureIndex({
participant_ids: 1
});
Run Code Online (Sandbox Code Playgroud)
对于第二个,我跟这个:
db.events.ensureIndex({
participant_1_id: 1,
participant_2_id: 1
});
Run Code Online (Sandbox Code Playgroud)
当你看他们的表现时,两者都有缺点.
Array可能比使用普通键慢.$or-operator不是很快.$or在查询的部分有无限的密钥和无限的项目).我的问题是: - 我应该使用什么样的设计?- 我可以索引Array吗?文档没有说明这一点,我不确定Array是什么(因为它们的内容可以变化很大).
第一个查询:使用数组可能比使用普通键慢.
我不这么认为.如果您有一个值("普通键")或多个("数组"),它应该是完全相同的基于索引的访问路径.
participant_1_id, participant_2_id 太可怕了.
| 归档时间: |
|
| 查看次数: |
1374 次 |
| 最近记录: |