5.8 MongoDB索引的管理
2025年09月26日
5.8 MongoDB索引的管理
前面已经介绍了索引对优化数据查询的重要性。先简单回顾一下索引:索引的本质就是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据(数据row或者document)的物理地址,索引可以大大加快查询的速度,这是因为使用索引后可以不再扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址(多数为B-tree查找),然后通过地址来访问相应的数据。
索引可以加快数据检索、排序、分组的速度,减少磁盘I/O,但是索引也不是越多越好,因为索引本身也是数据表,需要占用存储空间,同时索引需要数据库进行维护,当需要对索引列的值进行增删改操作时,数据库需要更新索引表,这会增加数据库的压力。
MongoDB中常用的索引类型包括:单键索引、复合索引、多键索引以及哈希索引。在介绍各种索引之前先在MongoDB中准备数据(图5-16)。
图5-16 数据准备
索引的增删改查比较简单,比如下面几个简单的索引管理方法:
//创建索引,值1表示正序排序,-1表示逆序排序
>db.user.createIndex({age:-1})
//查看user中的所有索引
>db.user.getIndexes()
//删除特定一个索引
>db.user.dropIndex({name:1,age:-1})
//删除所有的索引(主键索引_id不会被删除)
>db.user.drop Indexes()
如果要修改一个索引的话,可以先删除索引然后再重新添加。