【问题标题】:How to correctly build indexes on MongoDB when every field will be searchable and sortable?当每个字段都可搜索和可排序时,如何在 MongoDB 上正确构建索引?
【发布时间】:2020-02-18 22:45:48
【问题描述】:

我正在设计一个 MongoDB 集合,该集合将包含 5000 万个文档,并且文档中的每个字段都是可搜索和可排序的。搜索和排序逻辑将从前端发送,因此可能会有很多字段搜索和排序组合。我做了一些测试并得出结论,当仅在索引字段中进行搜索和排序时,查询运行速度非常快,但在搜索或排序非索引字段时,查询运行速度非常慢。

考虑到会有很多可能的搜索/排序组合,在这种情况下如何在这个集合中构建索引以获得更好的性能?

【问题讨论】:

    标签: mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    索引的代价是额外的内存空间可能增加的执行时间数据库写入(插入和更新)操作。但是,正如您正确指出的那样,索引使数据库读取(和排序)变得非常快。

    创建索引简单直接,但是,您需要权衡取舍,大多数情况下,这通常是文档中字段的读写比例。

    如果您经常从一个非常大的集合中读取(或排序)文档(例如您提到的 5000 万个示例),那么为您用来识别(或排序)文档的所有字段添加索引是很有意义的,你只需要确保你不会用完数据库中的内存空间。不索引字段会非常令人沮丧,想象一下,如果您需要通过未索引的字段获取最后一个文档,则必须搜索 49,999,999 个文档才能找到它。

    我希望这会有所帮助。

    【讨论】:

    • 该集合将有大约 40 多个字段被搜索和排序,每分钟数十次。为这些字段中的每一个创建索引是否是一个好主意?
    • Mongo 应该能够相当轻松地处理这个问题,但这实际上取决于您的写入/秒,因为索引的每个更改的字段都需要在写入/更新时更新其相应的索引
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2017-01-29
    • 2022-11-03
    相关资源
    最近更新 更多