MongoDB索引使用注意事项

 
本节我们来介绍以下使用索引时的一些限制和注意事项。

额外开销

每个索引都会占用一些空间,并且在每次执行插入、更新和删除等操作时也需要对索引进行操作,导致额外的开销。因此,如果您很少将某个集合用于读取操作,最好不要在集合中使用索引。

RAM 使用

由于索引存储在 RAM(内存)中,因此应确保索引的总大小不超过 RAM 的限制。如果总大小大于 RAM 的大小,那么 MongoDB 将删除一些索引,这就会导致性能下降。

查询限制

在以下的查询中,不能使用索引:
  • 正则表达式或否定运算符,例如 $nin、$not 等;
  • 算术运算符,例如 $mod 等;
  • $where 子句。

因此,建议经常使用 explain() 来检查查询时索引的使用情况。

索引键限制

从 2.6 版本开始,如果现有索引字段的值超过索引键的限制,那么 MongoDB 将不会创建索引。

插入超过索引键限制的文档

如果文档索引字段的值超过了索引键的限制,那么 MongoDB 不会将任何文档插入到集合中。mongorestore 和 mongoimport 实用程序也是如此。

最大范围

在定义索引时有以下几点需要注意:
  • 集合的索引不能超过 64 个;
  • 索引名称的长度不能超过 128 个字符;
  • 复合索引最多可以拥有 31 个字段。