如果有一个查询在字段a和b上进行过滤,然后在c上进行排序,那么是否需要为a,b和c构建单独的索引,还是应该实际构建(a,b,c)的复合索引)?此外,查询中的序列是否与索引中的序列匹配?也就是说,如果查询中的过滤器序列是过滤器b,过滤器c,然后在a上排序,那么最好是复合索引为(b,c,a)?在MongoDB中,需要选择哪些字段来构建索引?
2
A
回答
2
由于MongoDB目前每个查询只使用一个索引,因此您需要一个复合索引。
索引参数的顺序很重要,尽管不一定像你在问题中提到的那样。由于过滤首先发生,如果索引是(c,b,a),那么它对于过滤并不是很有用,特别是如果集合中有很多项目。应该在索引中最后指定用于排序的字段。
因此,索引应该是(a,b,c)或(b,a,c)。哪一个应该取决于选择性 - 换句话说,哪个字段会消除不匹配项更快的项目?
如果b有10,000个可能的值,并且a只有两个可能的值,那么索引应该是(b,a,c)。相反,如果a有更多可能的值,那么它可能应该是(a,b,c)。如果这两个字段在消除查询中文档的能力方面大致相同,那么它们无关紧要。
1
所有这些以及更多内容在docs中得到解答。请参阅复合索引章节。
查询参数的顺序无关紧要。
相关问题
- 1. 我需要索引哪些字段?
- 2. Google Checkout需要哪些字段?
- 3. Dyanamically选择写入哪些CSV字段
- 4. 此字段是否需要索引?
- 5. 查询速度慢,哪些字段建立索引
- 6. 我应该在Rails应用程序中索引哪些字段?
- 7. 哪些字段应该放在索引中?
- 8. MongoDB创建字段结构
- 9. MongoDB:两字段索引与文档字段索引
- 10. 如何在MongoDB或Mongoid中为散列字段建立索引?
- 11. 在mongoDB中的几个字段建立索引
- 12. 在MongoDB中缓慢创建四字段索引
- 13. 在elasticsearch中索引文档时创建了哪些索引
- 14. 哪些maven2构件需要用CXF和Spring构建WS?
- 15. 有关确定需要创建哪些索引的任何建议?
- 16. MongoDB在多个字段上的索引
- 17. MongoDB索引是否存在字段?
- 18. MongoDB的需要很长的索引
- 19. 我在Eclipse Android项目上真正需要哪些构建器?
- 20. 是否需要在经纬度字段中添加索引
- 21. 建议需要适当的索引中搜索与许多字段的表上
- 22. MongoDB的选择字段在阵列
- 23. 需要索引哪些列才能使此查询更快?
- 24. 下列情况下需要使用哪些索引
- 25. 在创建XML时需要处理哪些特殊字符?
- 26. 选择CMS之前需要询问哪些问题?
- 27. 我需要知道我的网址中的哪些在谷歌上被索引
- 28. 我需要手动构建Ruby DSL的哪些部分?
- 29. 使用PHP构建ORM时需要哪些功能?
- 30. 无法构建silverlight库,我需要哪些参考?
索引中的字段顺序绝对*很重要,特别是当某些用于过滤时,以及一些用于排序。 – 2012-02-01 07:39:34
当您在答案中解释时,索引字段的顺序很重要,但是查询参数的顺序不是。给定索引{a:1,b:1},查询{b:“hi”,a:23}将使用该索引。 – 2012-02-01 09:49:07
如果我有一个地理区域(假设它是c)并且我的查询看起来像 - find(c附近的point1,a> 5).sort(b)? (c:2d,a:1,b:1)的复合索引是否起作用,并且索引中c,a,b的顺序是否适合查询的最佳顺序? – tom 2012-02-01 16:28:50