5.8 MongoDB索引的管理

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()

如果要修改一个索引的话,可以先删除索引然后再重新添加。