MongoDB索引使用注意事项
本节我们来介绍以下使用索引时的一些限制和注意事项。
因此,建议经常使用 explain() 来检查查询时索引的使用情况。
额外开销
每个索引都会占用一些空间,并且在每次执行插入、更新和删除等操作时也需要对索引进行操作,导致额外的开销。因此,如果您很少将某个集合用于读取操作,最好不要在集合中使用索引。RAM 使用
由于索引存储在 RAM(内存)中,因此应确保索引的总大小不超过 RAM 的限制。如果总大小大于 RAM 的大小,那么 MongoDB 将删除一些索引,这就会导致性能下降。查询限制
在以下的查询中,不能使用索引:- 正则表达式或否定运算符,例如 $nin、$not 等;
- 算术运算符,例如 $mod 等;
- $where 子句。
因此,建议经常使用 explain() 来检查查询时索引的使用情况。
索引键限制
从 2.6 版本开始,如果现有索引字段的值超过索引键的限制,那么 MongoDB 将不会创建索引。插入超过索引键限制的文档
如果文档索引字段的值超过了索引键的限制,那么 MongoDB 不会将任何文档插入到集合中。mongorestore 和 mongoimport 实用程序也是如此。最大范围
在定义索引时有以下几点需要注意:- 集合的索引不能超过 64 个;
- 索引名称的长度不能超过 128 个字符;
- 复合索引最多可以拥有 31 个字段。