OPTIONS
翻译或纠错本页面

确保索引与内存相适应

为了达到更快的处理效果,请确保您的索引能完整地和内存相适应,这样可以避免从磁盘上读取索引。

可以使用帮助函数 db.collection.totalIndexSize() 来检查索引的大小,返回的数值单位是字节:

> db.collection.totalIndexSize()
4294976499

上述例子展示了一个几乎4.3GB的索引。为了确保索引与内存相适应,您不仅需要有那么多足够可用的内存用于索引,还要有足够的内存用于剩下的 working set 。还有请记住:

如果您拥有且使用多个集合,您必须考虑所有集合的所有索引的大小。所有的索引和工作集(working set)在同一时刻必须能与内存相适应。

还有一些受限制的情况下索引不需要和内存相适应。参见 只在内存中存储最近的数据的索引 了解更多。

只在内存中存储最近的数据的索引

索引并不需要在所有情况下都 完整地 与内存相适应。如果随着每次插入操作,被索引键的值是递增的,而且大多数查询总是选择最近添加的文档;那么,MongoDB只需要在内存中保存索引的一部分即可,索引的这部分持有的是最近的或者称为 “最右” 的数据。这可以允许读写操作中索引的有效利用,而且最小化支持该索引所需要的内存大小。