mongodb(五)-索引

参考:

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索引,分别是针对平面和球面。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值