您的位置:首页 > 数据库 > Mongodb

mongodb(五)-索引

2015-07-29 23:00 543 查看

参考:

http://www.ttlsa.com/mongodb/mongodb-index-explain-profile-4/

http://m.blog.csdn.net/blog/tianwei7518/44464917 

 

一、语法

    语法:db.COLLECTIONS_NAME.ensureIndex({KET:-1})  --1  升序索引,-1  降序索引

二、查看索引

> db.ttlsa_events.getIndexes();
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "ttlsa_login.ttlsa_events",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"stmp" : -1
},
"ns" : "ttlsa_login.ttlsa_events",
"name" : "stmp_-1"
},
{
"v" : 1,
"key" : {
"uid" : 1,
"stmp" : -1
},
"ns" : "ttlsa_login.ttlsa_events",
"name" : "uid_1_stmp_-1"
}
]

    此实例中有三个索引,其中_id_是创建表时自动创建的索引,不能删除。

三、创建索引
     索引参数有:
option values default
backgroud true/falsefalse
dropDups true/falsefalse
unique true/falsefalse
sparse true/falsefalse
>db.ttlsa_posts.ensureIndex({pid:1});
     当有大量数据时,创建索引会非常耗时,可以指定到后台执行,只需指定“backgroud:true”即可。如
>db.ttlsa_posts.ensureIndex({pid:1},{backgroud:true});
四、索引分类

    1.默认索引

        MongoDB有个默认的"_id"的键,他相当于"主键"的角色。集合创建后系统会自动创建一个索引在"_id"键上,它是默认索引,索引名叫"_id_",是无法被删除的。

    2.单列索引

        在单个键上创建的索引就是单列索引,如我们创建的db.user.ensureIndex({"name" : 1}

    3.组合索引

        同时对多个键创建组合索引。如下:

 

>db.user.ensureIndex({"name" : 1,"age" : 1}
//以下的查询将使用到此索引
> db.user.find({"name":'Jack',"age":20})
> db.user.find({"name":'Jack'})
> db.user.find().sort({"name":1})

 

         对多个值进行组合索引,查询时,子查询与索引前缀匹配时,才可以使用该组合索引。

    4.嵌入式索引

         为内嵌文档的键创建索引与普通的键创建索引并无差异。

        如:

 

> db.user.save({"name":"Jack","age":25,"address":{"city":"beijing"}});
> db.user.ensureIndex({"address.city":1})

 

    5.文档式索引

        索引建立在嵌入式文档类型的字段上。

        如:

 

> db.user.save({"name":"Jack","age":25,"address":{"city":"beijing"}});
> db.user.ensureIndex({"address":1})

 

    6.唯一索引

        只需要在ensureIndex命名中指定"unique:true"即可。唯一索引限制了对当前键添加值时,不能添加重复的信息。值得注意的是,当文档不存在指定键时,会被认为键值是“null”,所以“null”也会被认为是重复的,所以     一般被作为唯一索引的键,最好都要有键值。可以使用dropDups来保留第一个文档,而后的重复文档将删除,这种方法慎重操作。

 

>db.user.ensureIndex({name:1},{unique:true});

 

    7.sparse索引

 

        对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档。默认值为 false。解决索引文件过大的问题。不会对该键值为空的行做索、        引。     >db.user.ensureIndex({name:1},{sparse:true});      8.过期索引-expireAfter         指定一个值,以秒为TTL控制多久MongoDB的文档保留在此集合。储存在过期时间的字段必须是时间类型(ISODate或ISODate数组),不能使用复合索引。如果使用的是ISODate数组,则按照最小时间进行删除。         >db.user.ensureIndex({name:1},{expireafterseconds:3600}); 

 

    9.covered索引

        如果你查找的值正好是在索引中,则可以直接返回索引中存的值,而不用到数据文件中查找。当用explain时,当indexOnly=true,表示有用到covered index。

    10.全文索引

        mongodb全文索引是在2.4版本引入的。

     11.理位置索引

       关于LBS相关项目,一般存储每个地点的经纬度的坐标, 如果要查询附近的场所,则需要建立索引来提升查询效率。 Mongodb专门针对这种查询建立了地理空间索引。 2d和2dsphere索引,分别是针对平面和球面。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: