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索引,分别是针对平面和球面。
- MongoDB数据模型和索引学习总结
- mongodb 索引
- Mongodb基本操作入门,增删改查和索引
- 【MongoDB学习笔记22】MongoDB的索引管理
- MongoDB中唯一索引(Unique)的那些事
- 【MongoDB学习笔记27】MongoDB的TTL索引
- 10gen工程师谈MongoDB组合索引的优化
- Mongodb 的索引架构
- mongodb 索引相关
- MongoDB 索引
- MongoDB基础学习二----MongoDB中常用的索引操作
- MongoDB_07之索引
- mongodb指南(二十) - developer zone - 索引(四)地理信息索引
- MongoDB:13-MongoDB- 覆盖索引查询(Covered Queries)
- mongodb地理空间索引原理阅读摘要
- MongoDB-索引
- MongoDB大表建索引,出现一些问题
- Solr(搜索引擎服务)和MongoDB通过mongodb-connector进行数据同步的解决方案,以及遇到的各种坑的总结(针对solr-5.3.x版本),mongodb和solr实现实时增量索引
- 关于mongodb创建索引的一些经验总结
- MongoDB的基础查询和索引操作方法总结