假设我有以下设计:
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(...)
}
});如果我不使用索引,这可能并没有什么真正的区别,但是-of课程-我是
对于第一种设计,我将采用以下指标:
db.events.ensureIndex({
participant_ids: 1
});对于第二个问题,我将这样说:
db.events.ensureIndex({
participant_1_id: 1,
participant_2_id: 1
});当你看他们的表现时,他们都有缺点。
Array的可能比使用普通的Array查询慢:使用$or-operator的不是很好的fast.$or-part中有无限的密钥和无限的项)。我的问题是:-我应该使用什么设计?-我可以索引Arrays吗?文档没有提到这一点,我也不确定Array是什么(因为它们的内容可能有很大的变化)。
发布于 2011-08-10 10:37:24
第一次查询:使用数组可能比使用普通键慢。
我不这样认为。如果有一个值(“普通键”)或多个值("Array"),则应该是完全相同的基于索引的访问路径。
participant_1_id, participant_2_id太可怕了。
https://stackoverflow.com/questions/7009375
复制相似问题