写在前面
学过其他关系型数据库,比如MySQL啊,微软的MSSQL啊,oracle啊。我们知道,在数据库中索引是至关重要,它能加快我们查询数据的速度,数据库索引与书籍的索引类似,有了索引我们不需要一页一页的去翻整本书,只需查看索引,需要查找的内容在第几第几页。很快迅速的找到数据。数据库中也是一样的,在索引中找到条目后,就可以直接跳转到目标文档的位置。
1.增加索引
前面介绍过了,索引具有加速查询速度的功能,在高并发的软件设计中,是必不可少的,那么我们讨论的是MongoDB,如何在MongoDB中创建索引呢?也很容易。使用ensureIndex方法。
如:我想给username和id创建索引。可以这样:
>db.user.ensureIndex({"user_id":1,"name:1"}) //
这样就为user集合创建好了索引,非别是user_id 和name。值为1和 -1分别表示创建索引的方向,若索引就一个键,则方向不关紧要,单键索引有点像一个按字母排序组织的书籍索引,无乱从A--Z,还是从Z--A,显然都要从M开始找。
2.管理查看索引
可以用system.indexes这个集合来管理和查看索引。
> show collections blog foo system.indexes //这个集合就是来存储索引的。 user >
> db.system.indexes.find() { "v" : 1, "key" : { "_id" : 1 }, "ns" : "php.blog", "name" : "_id_" } //"_id"是默认的组建 { "v" : 1, "key" : { "_id" : 1 }, "ns" : "php.user", "name" : "_id_" } { "v" : 1, "key" : { "_id" : 1 }, "ns" : "php.foo", "name" : "_id_" } { "v" : 1, "key" : { "user_id" : 1, "name" : 1 }, "ns" : "php.user", "name" : "user_id_1_name_1" } //索引信息。
3.修改索引
当我们以前做的集合随着项目的深入,或许索引会发生变化。我们可以来修改索引。也是用ensureIndex( ).
比如上诉的user集合,我想修改成为age为索引。那么
> db.user.ensureIndex({"age":1},{"background":true}) //修改索引,加上background:true。因为数据量巨大,后台完成,可以给其他动作留有空间。 > db.system.indexes.find() { "v" : 1, "key" : { "_id" : 1 }, "ns" : "php.blog", "name" : "_id_" } { "v" : 1, "key" : { "_id" : 1 }, "ns" : "php.user", "name" : "_id_" } { "v" : 1, "key" : { "_id" : 1 }, "ns" : "php.foo", "name" : "_id_" } { "v" : 1, "key" : { "user_id" : 1, "name" : 1 }, "ns" : "php.user", "name" : "user_id_1_name_1" } { "v" : 1, "key" : { "age" : 1 }, "ns" : "php.user", "name" : "age_1", "background" : true } //加入新的索引,并在后台完成 >
4.删除索引
可以使用dropIndexes()来删除索引。