MongoDB:"Where"-Select 上的复合索引
MongoDB: Compound Indexes on a "Where"-Select
我有以下 MongoDB 架构:
mandate: {
type: mongo.Schema.Types.ObjectId,
ref: 'Mandate',
required: true
},
observer: {
type: mongo.Schema.Types.ObjectId,
ref: 'Observer',
required: true
},
value: {
type: Number,
required: true
},
observedAt: {
type: Date,
required: true
}
此集合包含大量数据。
我通过以下方式索取数据:
给我所有数据
2015 年至 2016 年间观察到的
在哪里
观察者 = "a" 和
授权 = "b"
是否有针对 3 个字段(观察者、授权、观察点)的复合索引的最佳实践方法?
今天,我这样做:
schema.index({
mandate: 1,
observer: 1,
observedAt: -1
});
这是正确的方法吗?
如果您总是查询所有这 3 个字段,就像在您的示例中一样,那么是的,这很好。另外因为您使用 observedAt
作为最后一个索引,您也可以按该字段 sort
并且它仍然会在排序阶段使用索引。
但是,如果您的查询可以使用更少或更多字段进行更改,那么它可能不是最佳选择。在这里阅读更多相关信息,特别是查看示例
我有以下 MongoDB 架构:
mandate: {
type: mongo.Schema.Types.ObjectId,
ref: 'Mandate',
required: true
},
observer: {
type: mongo.Schema.Types.ObjectId,
ref: 'Observer',
required: true
},
value: {
type: Number,
required: true
},
observedAt: {
type: Date,
required: true
}
此集合包含大量数据。
我通过以下方式索取数据: 给我所有数据 2015 年至 2016 年间观察到的 在哪里 观察者 = "a" 和 授权 = "b"
是否有针对 3 个字段(观察者、授权、观察点)的复合索引的最佳实践方法?
今天,我这样做:
schema.index({
mandate: 1,
observer: 1,
observedAt: -1
});
这是正确的方法吗?
如果您总是查询所有这 3 个字段,就像在您的示例中一样,那么是的,这很好。另外因为您使用 observedAt
作为最后一个索引,您也可以按该字段 sort
并且它仍然会在排序阶段使用索引。
但是,如果您的查询可以使用更少或更多字段进行更改,那么它可能不是最佳选择。在这里阅读更多相关信息,特别是查看示例