Mongodb索引管理

MongoDB 中的索引包含一下几类
唯一索引
松散索引(只会让指定字段不为空的行参与到索引创建中来)
多值索引(对一个array类型创建索引)
复合索引(如果想用到复合索引,必须在查询条件中包含复合索引中的前N个索引列。然而如果查询条件中的键值顺序和复合索引中的创建顺序不一致的话,MongoDB可以智能的帮助我们调整该顺序,以便使复合索引可以为查询所用)

创建索引命令:
db.test.ensureIndex({"username":1})

或者
spec = {ns: "test.users", key: {‘addresses.zip’: 1}, name: ‘zip’}
db.system.indexes.insert(spec, true)

创建时指定名字:
db.test.ensureIndex({"username":1},{"name":"testindex"})

//数字1表示username键的索引按升序存储,-1表示age键的索引按照降序方式存储
删除索引命令
db.test.dropIndex({"username":1})

或者
db.runCommand({deleteIndexes: "test", index: "username"})

唯一索引创建命令
db.test.ensureIndex({"username":1},{unique:true})

唯一索引消除重复文档
db.test.ensureIndex({"username":1},{unique:true, dropDups:true})

创建松散索引
db.test.ensureIndex({"username":1},{sparse:true})

创建多值索引
db.test.dropIndex({"tags":1})
{ name: "Wheelbarrow",
tags: ["tools", "gardening", "soil"]
}
//在生成索引时,会为tags中的三个值分别生成三个索引元素,索引中tools,gardening,soil三个值都会指向这同一行数据。相当于分裂成了三个独立的索引项


创建复合索引
db.test.ensureIndex({"username":1, "age":1})


如果在为已有数据的文档创建索引时,可以执行下面的命令,以使MongoDB在后台创建索引,这样的创建时就不会阻塞其他操作。但是相比而言,以阻塞方式创建索引,会使整个创建过程效率更高,但是在创建时MongoDB将无法接收其他的操作
db.test.ensureIndex({"username":1},{"background":true})

猜你喜欢

转载自muzilimeng06.iteye.com/blog/2054584