performance - mongodb 的索引

标签 performance mongodb indexing

我有一个用于餐厅的 mongo db 集合。
例如
{_id:uniquemongoid,
排名:3,
城市:'柏林'
}

  • 餐馆按城市列出并按排名(整数)排序​​ - 我应该创建城市和排名的索引,还是城市/排名复合? (我按城市查询,按排名排序)
  • 此外,还有几个带有 bool 值的字段,例如{ hasParking:true, familyFriendly:true } - 我应该创建索引来加速对这些过滤器的查询吗?复合索引?我不清楚是否应该创建复合索引,因为查询只能有一个 bool 集或多个 bool 集。
  • 最佳答案

    确定是否需要索引的最佳方法是使用“explain()”对其进行基准测试。

    至于您建议的索引:

  • 您将需要城市/排名复合索引。 MongoDB 中的索引只能用于从左到右(目前),因此对“city”进行相等搜索,然后按“rank”对结果进行排序将意味着 { city: 1, rank: -1 }索引效果最好。
  • bool 字段的索引通常不是很有用,因为平均而言 MongoDB 仍然需要访问一半的文档。在按城市进行选择(并希望是一个限制!)为 hasParking 等做一个额外的过滤器之后,MongoDB 不会同时使用城市/排名和 hasParking 索引。 MongoDB 每个查询只能使用一个索引。
  • 关于performance - mongodb 的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17591022/

    相关文章:

    c# - C++/CLI + C++ Native 会提高性能吗?

    javascript - 确定新数据是否可用的最佳方法

    node.js - Mongoose model.find 查询字符串

    sql - 索引如何在 View 上工作?

    c++ - 当我想在本地存储来自应用程序的数据并且没有外部依赖时,我有哪些选择?

    reactjs - 更改url时如何防止react-route重新渲染整个应用程序

    mongodb - 我应该确保 MongoDB 在启动时或在脚本中建立索引吗?

    java - 如何避免使用 Spring-Boot 下载嵌入式 MongoDb

    python - 如何一次将二维数组的两列与python中另一个数组的列进行比较

    oracle - 设置 Oracle Text 以索引 Oracle 表中多列的值