mongodb - 使用 MongoDB,需要选择哪些字段来构建索引?

标签 mongodb indexing compound-index

如果有一个查询对字段 a 和 b 进行过滤,然后对 c 进行排序,我是否需要为 a、b 和 c 构建单独的索引,或者我应该实际构建 (a, b, C)?另外,查询中的序列是否应该与索引中的序列匹配?也就是说如果查询中的过滤顺序是过滤b,过滤c,然后对a进行排序,那么复合索引是不是最好是(b,c,a)?

最佳答案

由于 MongoDB 目前每个查询仅使用一个索引,因此您将需要一个复合索引。

索引参数的顺序确实很重要,尽管不一定按照您在问题中提到的方式。

由于过滤首先发生,因此如果索引是(c,b,a),那么它对于过滤不会很有用,特别是当集合中有很多项目时。用于排序的字段应在索引的最后指定。

因此索引应该是 (a,b,c) 或 (b,a,c)。它应该是哪一个取决于选择性 - 换句话说,哪个字段将更快地消除不匹配的项目?

如果 b 有 10,000 个可能值,而 a 只有两个可能值,则索引应为 (b,a,c)。相反,如果 a 有更多可能的值,那么它可能应该是 (a,b,c)。如果这两个字段从查询中消除文档的能力大致相同,那么就没有那么重要了。

关于mongodb - 使用 MongoDB,需要选择哪些字段来构建索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9090903/

相关文章:

python monary 0.2.3 (mongo monary driver) : error in setup on windows 64bit (Anaconda distribution)

java - 如何找到其中包含空元素的整数数组的最大元素的索引?

postgresql - 加速 GIN 索引创建

angularjs - 从 Mongoose 模式中获取关注者

mongodb - 如何在Golang MongoDB中使用此聚合条件

java - 索引 neo4j 中的现有关系

mysql 复合索引也索引单个字段吗?

performance - MongoDB 中的复合索引是否改进了多重匹配(而不是排序)?

performance - MongoDB 按许多参数过滤(复合索引或不复合索引)

python - 一个文件启动所有服务... mongodb、redis、node、angular 和 python