0

我很难决定将排序字段放在 mongodb 复合索引中的最佳位置。

我的理解是,我们需要选择最高的基数和选择性作为复合索引中的前面字段

db.person.createIndex({ rating: 1, name: 1, gender: 1});

对于这个例子,rating 的范围只有 1 到 5,gender 是 M 或 F 所以,name 总是最高的基数和选择性,应该是复合索引中最左边的字段;但是,查询的用例是在查询中始终提供评分,并且可以通过应用程序中的过滤器选择提供姓名或性别。

哪种选择最适合这种情况:

1)

db.person.createIndex({ rating: 1, name: 1, gender: 1});

2)

db.person.createIndex({ rating: 1});
db.person.createIndex({ name: 1, gender: 1});
db.person.createIndex({ gender: 1});
4

1 回答 1

0

您需要添加这些索引:

// supports query with rating and gender specified
db.person.createIndex({ rating: 1, gender: 1});

// supports query with rating and name (and optionally gender) specified
db.person.createIndex({ name: 1, rating: 1, gender: 1});
于 2021-02-13T04:50:04.810 回答