补充我创建的索引如下: -
db.collection.createIndex( { propA: 1, propB: 1, propC:1 } )
我查询如下: -
db.collection.find({propB:'x', propC: 'y', propA:'z'})
将mongo查询引擎使用上面创建的索引与否。 在编写查询时,关键序列是否与复合索引的使用有关?
答案 0 :(得分:1)
查询中键的顺序无关紧要:MongoDB足够聪明,可以查看所有查询的属性并找到合适的索引。
但是,在索引中定义的键的顺序很重要:复合索引可以按照它们在索引文档中定义的顺序用于match queries against any prefix of its keys。因此,您的上述索引可用于回答apply(df[, c("cols on which median should be calculated")], 2, median, na.rm=T)
之类的查询,但不能回复{propA: 'x', propB: 'y'}
之类的查询。
您可以使用explain()
来确定MongoDB将用于特定查询的索引。
答案 1 :(得分:0)
为了添加Avish的答案,这种包含多个字段的索引称为复合索引。复合索引中列出的字段顺序非常重要。原因如下:
索引将包含对首先按第一个字段的值排序的文档的引用,并且在第一个字段的每个值内,按第二个字段的值排序,并在第二个字段的每个值内,按值排序第三个字段,依此类推。
例如,在您的情况下,索引将包含对首先按propA字段的值排序的文档的引用,并且在propA字段的每个值内,按propB字段的值排序,并在propB字段的每个值内排序,按propC字段的值排序。
所以请记住,以下查询将使用给定的索引:
以下不能使用给定的索引: