gpt4 book ai didi

MongoDB 复合索引

转载 作者:可可西里 更新时间:2023-11-01 09:58:45 25 4
gpt4 key购买 nike

我的集合需要复合索引,但我不确定键的顺序

我的项目:

 {
_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 })

在人类中,我需要 map 可见部分的所有事件项目,这些项目没有过期,新添加 - 首先。

创建这个索引是否正常:

  db.collection.createIndex( { "isActive": 1, "till": -1, "location": "2dsphere", "createdAt": -1 } )

性能和磁盘使用的最佳顺序是什么?或者,也许我必须创建多个索引...

谢谢!

最佳答案

索引中字段的顺序应该是:

  1. 您将在其上查询精确值的字段。
  2. 您要排序的字段。
  3. 您将查询一系列值的字段。

在您的情况下,它将是:

db.collection.createIndex( { "isActive": 1, "createdAt": -1, "till": -1, "location": "2dsphere"  } )

但是, bool 字段上的索引通常不是很有用,因为平均而言,MongoDB 仍需要访问一半的文档。因此,我建议您执行以下操作:

  1. 为测试目的复制集合
  2. 创建索引,你想测试(即 {"isActive": 1, "createdAt": -1, "till": -1, "location": "2dsphere"})
  3. 在 mongo shell 中创建变量:

    var exp = db.testCollection.explain('executionStats')

  4. 执行以下查询 exp.find({'you query'}) 它将返回描述获胜计划执行情况的统计信息

  5. 分析键,例如:“nReturned”、“totalKeysExamined”、“totalDocsExamined”
  6. 删除索引,创建新索引(即 {"createdAt": -1, "till": -1, "location": "2dsphere"}),执行 exp。 find({'you query'}) 将结果与前一个进行比较

关于MongoDB 复合索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42623570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com