我需要复合指数为我的收藏,但我不知道钥匙订购MongoDB的合成指数
我的项目:
{
_id,
location: {
type: "Point",
coordinates: [<lng>, <lat>]
},
isActive: true,
till: ISODate("2016-12-29T22:00:00.000Z"),
createdAt : ISODate("2016-10-31T12:02:51.072Z"),
...
}
我的主要查询是:
db.collection.find({
$and: [
{
isActive: true
}, {
'till': {
$gte: new Date()
}
},
{
'location': { $geoWithin: { $box: [ [ SWLng,SWLat], [ NELng, NELat] ] } }
}
]
}).sort({'createdAt': -1 })
在人类,我需要在我的地图的可见部分没有过期的所有活动项目,新添加 - 首先。
是正常创建这个索引:
db.collection.createIndex({ "isActive": 1, "till": -1, "location": "2dsphere", "createdAt": -1 })
什么是性能最好的顺序,对磁盘使用情况?或者,也许我必须创建几个索引...
谢谢!
谢谢,阿列克 我要创建一些测试......但一些言论: isActive在〜95%是真实的,但由于某些原因的统计数据我做一些额外的查询:'db.collection.find( {$和:[{isActive:true},{'till':{$ gte:new Date()}}]})'和'db.collection.find({$ and:[{isActive:true},{ 'till':{$ gte:new Date()}},{createdAt:{$ gte:today}}]})',无需排序和geo。 kyes订单是否一样? P.S.非常感谢来自敖德萨的基辅( - : – none
))很好。对于'createdAt'字段用作过滤器的情况,索引顺序是相同的。但是,如果查询中没有“createdAt”字段(既不在过滤器中,也不在排序中),建议的索引将不会被使用,可能最好为'till'字段创建一个更多的索引。但请记住,额外的索引会降低写入和删除操作的性能 –