日期:2014-05-16  浏览次数:20385 次

MongoDB索引管理

?

本文内容源自Kyle Banker?的?MongoDB?In Action一书。主要描述了MongoDB索引相关的一些基础知识和使用技巧。

索引类型

虽然MongoDB的索引在存储结构上都是一样的,但是根据不同的应用层需求,还是分成了唯一索引(unique)、稀疏索引(sparse)、多值索引(multikey)等几种类型。

唯一索引

唯一索引在创建时加上unique:true 的选项即可,创建命令如下:

?

db.users.ensureIndex({username: 1}, {unique: true})

?上面的唯一索引创建后,如果insert一条username已经存在的数据,则会报如下的错误:

?

E11000 duplicate key error index: gardening.users.$username_1 dup key: { : "kbanker" }

?如果你在一个已有数据的collection上创建唯一索引,若唯一索引对应的字段原来就有重复的数据项,那么创建会失败,我们需要加上一个dropDups的选项来强制将重复的项删除掉,命令如下例:

?

db.users.ensureIndex({username: 1}, {unique: true, dropDups: true})
?

松散索引

如果你的数据中一些行中没有某个字段或字段值为null,那么如果在这个字段上建立普通索引,那么无此字段或值null的行也会参与到索引结构中,占用相应的空间。如果我们不希望这些值为空的行参与到我们的索引中,这时候可以采用松散索引,松散索引只会让指定字段不为空的行参与到索引创建中来。创建一个松散索引可以用下面的命令:

?

db.reviews.ensureIndex({user_id: 1}, {sparse: true})

?

多值索引

MongoDB可以对一个array类型创建索引,比如像下面的结构,MongoDB可以在tags字段上创建索引:

?

{ name: "Wheelbarrow",
tags: ["tools", "gardening", "soil"]
}
?

?

在生成索