【问题标题】:MongoDB Compound Index Prefix with Sort带排序的 MongoDB 复合索引前缀
【发布时间】:2020-05-11 09:36:01
【问题描述】:

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

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

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

对于此示例,评分范围仅从 1 到 5,性别为 M 或 F 因此,名称始终是最高的基数和选择性,应该是复合索引中最左边的字段;但是,查询的用例是在查询中始终提供评分,并且可以通过应用程序中的过滤器选择提供姓名或性别。

哪个选项最适合这种情况:

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});

【问题讨论】:

  • 您要对哪个字段进行排序?
  • 评级总是提供给排序
  • 如果不实际尝试一些实际查询和具有不同索引的样本数据集,就很难说什么。一般来说,由于rating 用于查询过滤器和排序always,索引{ rating: 1, name: 1, gender: 1} 可以被认为是主要候选。查询计划(使用explain)将提供足够的信息来做出决定。此外,请参阅有关使用复合索引进行排序的 MongoDB 文档主题:Use Indexes to Sort Query Results

标签: mongodb indexing mongodb-query mongodb-indexes compound-index


【解决方案1】:

你需要添加这些索引:

// 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});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    相关资源
    最近更新 更多