我需要複合指數爲我的收藏,但我不知道鑰匙訂購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'字段創建一個更多的索引。但請記住,額外的索引會降低寫入和刪除操作的性能 –