mongodb-索引
说明:创建索引时,列名:int 中的int数字指的是正序或者倒序,如果是1表明是正序,-1表示倒序
1、查询collection上的索引
db.users.getIndexes()
2、查询当前的db的所有collection所拥有的索引
db.getCollectionNames().forEach(function(collection) {
indexes = db[collection].getIndexes();
print("Indexes for " + collection + ":");
printjson(indexes);
});
3、创建索引(background使创建索引的过程在后台完成,在索引创建期间可以处理其他请求,如果不加会阻塞创建索引期间的所有请求)
db.test.createIndex( {name: 1},{background:true} )
4、删除索引
db.test.dropIndex( {name :1} ) #删除name字段上的索引
db.test.dropIndexes() #删除collection下的所有索引除_id 这个主键索引
5、重建索引
db.test.reIndex( {name :1} )
6、Embedded Field创建索引
{ "_id" : ObjectId("57a1abd6369a01a77bb7f007"), "info" : { "age" : 32, "weight" : "75KG", "height" : "174cm" }, "contacts" : { "address" : "beijing", "phone" : 18651866297 } }
db.test.createIndex( { "contacts.phone" :1 },{ background:true} )
7、Embedded Field创建索引
{ "_id" : ObjectId("57a1abd6369a01a77bb7f007"), "info" : { "age" : 32, "weight" : "75KG", "height" : "174cm" }, "contacts" : { "address" : "beijing", "phone" : 18651866297 } }
db.test.createIndex( { "contacts.phone" :1 },{ background:true} )
8、查询执行计划
pandatv_msg:PRIMARY> db.test.find( { "contacts.phone": 18651866297} ).explain()
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "gaoquan.test",
"indexFilterSet" : false,
"parsedQuery" : {
"contacts.phone" : {
"$eq" : 18651866297
}
},
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"contacts.phone" : 1
},
"indexName" : "contacts.phone_1",
"isMultiKey" : false,
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 1,
"direction" : "forward",
"indexBounds" : {
"contacts.phone" : [
"[18651866297.0, 18651866297.0]"
]
}
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "mongo3v.notify.bjac.pdtv.it",
"port" : 27017,
"version" : "3.2.8",
"gitVersion" : "ed70e33130c977bda0024c125b56d159573dbaf0"
},
"ok" : 1
}
pandatv_msg:PRIMARY> db.test.find( { "contacts.address": "beijing"} ).explain()
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "gaoquan.test",
"indexFilterSet" : false,
"parsedQuery" : {
"contacts.address" : {
"$eq" : "beijing"
}
},
"winningPlan" : {
"stage" : "COLLSCAN",
"filter" : {
"contacts.address" : {
"$eq" : "beijing"
}
},
"direction" : "forward"
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "mongo3v.notify.bjac.pdtv.it",
"port" : 27017,
"version" : "3.2.8",
"gitVersion" : "ed70e33130c977bda0024c125b56d159573dbaf0"
},
"ok" : 1
}
9、Embedded Document创建索引
{ "_id" : ObjectId("57a1abd6369a01a77bb7f007"), "info" : { "age" : 32, "weight" : "75KG", "height" : "174cm" }, "contacts" : { "address" : "beijing", "phone" : 18651866297 } }
db.test.createIndex( { "contacts.phone" :1 },{ background:true} )
10、创建组合索引
{ "_id" : ObjectId("57a1afe5369a01a77bb7f008"), "info" : { "age" : 32, "weight" : "75KG", "height" : "174cm" }, "contacts" : { "address" : "beijing", "phone" : 18651866297 }, "blog" : "http://home.cnblogs.com/u/gaoquan/", "company" : "pandatv" }
db.test.createIndex( { blog :1 , company: 1},{ background:true} )
11、创建前缀索引
{ "_id" : ObjectId("57a1afe5369a01a77bb7f008"), "info" : { "age" : 32, "weight" : "75KG", "height" : "174cm" }, "contacts" : { "address" : "beijing", "phone" : 18651866297 }, "blog" : "http://home.cnblogs.com/u/gaoquan/", "company" : "pandatv" }
db.test.createIndex( { blog :1 , company: 1},{ background:true} )
12、创建前缀索引
{ "_id" : ObjectId("57a1afe5369a01a77bb7f008"), "info" : { "age" : 32, "weight" : "75KG", "height" : "174cm" }, "contacts" : { "address" : "beijing", "phone" : 18651866297 }, "blog" : "http://home.cnblogs.com/u/gaoquan/", "company" : "pandatv", "hometown": "neimeng" }
db.test.createIndex( { blog :1 , company: 1, hometown: 1},{ background:true} )
说明:和关系型中的索引一样,组合索引中支持前缀索引,如上面索引,查询中包含blog,或者blog,company,或者blog,company,hometown都能使用到索引,如果是hometown则不能使用索引
13、创建多key索引
{ _id: 5, type: "food", item: "aaa", ratings: [ 5, 8, 9 ] }
{ _id: 6, type: "food", item: "bbb", ratings: [ 5, 9 ] }
{ _id: 7, type: "food", item: "ccc", ratings: [ 9, 5, 8 ] }
{ _id: 8, type: "food", item: "ddd", ratings: [ 9, 5 ] }
{ _id: 9, type: "food", item: "eee", ratings: [ 5, 9, 5 ] }
db.test.createIndex( { ratings: 1 } )
{ _id: 1, a: [ 1, 2 ], b: [ 1,2 ] ,category: "test "}这种类型的不能创建{ a: 1, b:1 }
14、统计索引大小
db.collection.totalIndexSize()
15、强制使用索引
cursor.hint()
db.users.find().hint( {age:1} )
db.users.find().max( { item: 'apple',type: 'jonagold' } ).hint( { item:1,type:1 })
16、查询最大值
cursor.hint()
db.users.find().hint( {age:1} )
mongodb-索引的更多相关文章
- [DataBase] MongoDB (7) MongoDB 索引
MongoDB 索引 1. 建立索引 唯一索引db.passport.ensureIndex( {"loginname": 1}, {"unique": tru ...
- MongoDB索引介绍
MongoDB中的索引其实类似于关系型数据库,都是为了提高查询和排序的效率的,并且实现原理也基本一致.由于集合中的键(字段)可以是普通数据类型,也可以是子文档.MongoDB可以在各种类型的键上创建索 ...
- MongoDB(索引及C#如何操作MongoDB)(转载)
MongoDB(索引及C如何操作MongoDB) 索引总概况 db.test.ensureIndex({"username":1})//创建索引 db.test.ensureInd ...
- MongoDB索引(一)
原文地址 一.介绍 我们已经很清楚索引会提高查询效率.如果没有索引,MongoDB必须对全部集合进行扫描,即,扫描集合中每条文档以选择那些符合查询条件的文档.对查询来说如果存在合适的索引,则Mongo ...
- MongoDB 索引篇
MongoDB 索引篇 索引的简介 索引可以加快查询的速度,但是过多的索引或者规范不好的索引也会影响到查询的速度.且添加索引之后的对文档的删除,修改会比以前速度慢.因为在进行修改的时候会对索引进行更新 ...
- MongoDB索引的种类与使用
一:索引的种类 1:_id索引:是绝大多数集合默认建立的索引,对于每个插入的数据,MongoDB都会自动生成一条唯一的_id字段2:单键索引: 1.单键索引是最普通的索引 2.与_id索引不同,单键索 ...
- MongoDB索引,性能分析
索引的限制: 索引名称不能超过128个字符 每个集合不能超过64个索引 复合索引不能超过31列 MongoDB 索引语法 db.collection.createIndex({ <field&g ...
- MongoDB索引原理
转自:http://www.mongoing.com/archives/2797 为什么需要索引? 当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下M ...
- MongoDB · 引擎特性 · MongoDB索引原理
MongoDB · 引擎特性 · MongoDB索引原理数据库内核月报原文链接 http://mysql.taobao.org/monthly/2018/09/06/ 为什么需要索引?当你抱怨Mong ...
- MongoDB索引管理
一.创建索引 创建索引使用db.collectionName.ensureIndex(...)方法进行创建: 语法: >db.COLLECTION_NAME.ensureIndex({KEY:1 ...
随机推荐
- cpu主频信息
yangkunvanpersie ( yangkunvanpersie@163.com ) 通过"有道云笔记"邀请您查看以下笔记 修改CPU频率.note 打开笔记 kerne ...
- Cheatsheet: 2016 12.01 ~ 12.31
Other Code review in remote teams 5 Signs That Your REST API Isn't RESTful Web Server Side React Sta ...
- 删除github仓库中的某个文件夹
最近在做一个项目,由于前期文件夹名是中文,如下: |---Repository |--- React单页面音乐播放器 并且git push到了github上. 后来在本地把文件夹re ...
- JS高级程序设计 笔记
1.instanceof 可以判断实例是否在某个对象的原型上: function A() { this.a = "a"; } function B() { this.b = &qu ...
- iStylePDF c#集成开发示例
iStylePDF安装包自带了ActiveX控件,下载安装包安装之后就可以使用,如果没有安装包请到360软件管家或者腾讯软件管家搜索下载.C#的Form中集成ActiveX控件还是非常简单的,选择添加 ...
- JAVA 重复提交
FormServlet package servlet; import java.io.IOException; import javax.servlet.ServletException; impo ...
- Ruby--学习记录(实时更新)
变量的命名方式决定了变量的种类: 局部变量 以英文字母或者_开头: 全局变量 以$开头: 实例变量 以@开头: 类变量 以@@开头:
- Modbus RTU程序开发解读
Modbus是很好的串口通信协议,其中RTU协议最为常用,通过Modbus RTU,我们可以轻松读写串口信息. 从官网下载libModbus,观察modbus.h可知关键的结构体为: typedef ...
- Java 执行系统命令
在Java中执行系统命令,主要是使用ProcessBuilder和Runtime.getRuntime().exec().而在这里主要是介绍两种方法的使用. 使用情景是在linux系统中,使用menc ...
- 推荐两本学习linux的经典书籍