给MongoDB添加索引

用过数据库的都知道,数据库索引与书籍的索引类似,都是用来帮助快速查找的。

MongoDB的索引跟关系型数据库的索引几乎一致。

1. 索引的创建

mongodb采用ensureIndex来创建索引,如:

db.user.ensureIndex({"name":1})

表示在user集合的name键创建一个索引,这里的1表示索引创建的方向,可以取值为1和-1

在这里面,我们没有给索引取名字,mongodb会为我们取一个默认的名字,规则为keyname1_dir1_keyname2_dir2...keynameN_dirN

keyname表示键名,dir表示索引的方向,例如,上面的例子我们创建的索引名字就是name_1

索引还可以创建在多个键上,也就是联合索引,如:

> db.user.ensureIndex({"name":1,"age":1})

这样就创建了name和age的联合索引

除了让mongodb默认索引的名字外,我们还可以去一个方便记的名字,方法就是为ensureIndex指定name的值,如:

> db.user.ensureIndex({"name":1},{"name":"IX_name"})

这样,我们创建的索引的名字就叫IX_name了

2. 唯一索引

与RDB类似,我们也可以定义唯一索引,方法就是指定unique键位true:

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

3.查看我们建立的索引

索引的信息存在每个数据库的system.indexes集合里面,对这个集合只能有ensureIndex和dropIndexes进行修改,不能手动插入或修改集合。

通过> db.system.indexes.find()可以找到数据库中多有的索引:

> db.system.indexes.find()

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.entities", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.blog", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.authors", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.papers", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.analytics", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.user", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.food", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.user.info", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.userinfo", "name" : "_id_" }

{ "v" : 1, "key" : { "name" : 1 }, "ns" : "test.user", "name" : "IX_name" }

4.删除索引

如果索引没有用了,可以使用dropIndexes将其删掉:

> db.runCommand({"dropIndexes":"user","index":"IX_name"})

{ "nIndexesWas" : 2, "ok" : 1 }

ok表示删除成功

时间: 2024-11-05 20:36:07

给MongoDB添加索引的相关文章

MongoDB数据库索引

前面的话 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录.这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的.本文将详细介绍MongoDB数据库索引 引入 索引能够提高查询效率,如何体现呢?接下来使用性能分析函数explain()来进行分析说明 首先,插入10万条数据 接着,不创建索引,来寻找time范围在100和200之间的文档 由图中所知,tot

【MongoDB学习笔记20】MongoDB的索引

MongoDB的索引和关系型数据库的索引概念和功能是相同的: (1)不使用索引的搜索可以称为全表扫面,也就是说,服务器必须找完整个表才能查询整个结果: (2)建立索引后搜索,查询在索引中搜索,在索引的条目中找到条目以后,就可以直接跳转到目标文档的位置:这样的搜索比全表的搜索的速度要提高好几个数量级: 先向集合blog中添加1000000个文档: > for (i=0;i<1000000;i++){    ... db.users.insert(     ... {"i":i

MongoDB入门学习(四):MongoDB的索引

上一篇讲到了MongoDB的基本操作增删查改,对于查询来说,必须按照我们的查询要求去集合中,并将查找到的结果返回,在这个过程中其实是对整个集合中每个文档进行了扫描,如果满足我们的要求就添加到结果集中最后返回.对于小集合来说,这个过程没什么,但是集合中数据很大的时候,进行表扫描是一个非常恐怖的事情,于是有了索引一说,索引是用来加速查询的,相当于书籍的目录,有了目录可以很精准的定位要查找内容的位置,从而减少无谓的查找. 1.索引的类型 创建索引可以是在单个字段上,也可以是在多个字段上,这个根据自己的

mongodb基础-索引

1.索引介绍 mongodb的索引和我们遇到的rdbms的索引含义一样,原理也基本一样 首先我们先在一个没有索引的集合上做一个查询,具体的查询计划可以通过explain()函数获取: > db.t1.find({"username":"user101"}).explain() { "queryPlanner" : { "plannerVersion" : 1, "namespace" : "

MongoDB-2:MongoDB添加、删除、修改

一.简介 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSQL数据库产品中最热门的一种.数据被分组存储在数据集中,被称为一个集合(Collenction)和对于存储在MongoDB数据库中的文件,我们不需要知道它的任何结构定义的自由模式,在存储数据时是以键-值对的集合键是字符串,值可以是数据类型集合里的任意类型,包括数组和文档. MongoDB存储在集合中的所有文件,集合是一组有一组共享公共索引的相关文档,集合类似于关系数据库中的表.在MongoDB中,这些操作修改单个采集数

二叉树添加索引

前序遍历创建,中序遍历添加索引.. typedef struct BiNode { char data; char ltag, rtag; struct BiNode *lchild, *rchild; }BiNode; void createTree(BiNode **root); void printTree(BiNode *root, int lever); void addThread(BiNode *root, BiNode *pre); void desTree(BiNode *ro

mongoose中给字段添加索引的方法

mongoose中给字段添加索引的方法有两种,一种通过在定义schema的时候配置,如: 1 var animalSchema = new Schema({ 2 name: String, 3 type: String, 4 tags: { type: [String], index: true } 另一种通过index方法添加索引,如给name和type字段添加索引(1和-1分别表示升序索引和降序索引): animalSchema.index({ name: 1, type: -1 });

JS初学——添加索引匹配数组练习

1.页面布局 <div id="wrap"> <img src=""/> <span>页面数量正在加载中...</span> <p>图片说明正在加载中..</p> <ul></ul> </div> 2.添加样式 <style type="text/css"> li{list-style: none;} ul{margin: 0;

添加索引(IOS开发)

索引是用来辅助查询. 原则: - 索引标题不能与显示的标题完全一样: - 索引应该具有一定的代表性,能够代表一个数据集合: - 如果采用了索引列表视图,一般情况下就不再使用扩展视图.(容易点到) 会重新到的数据源方法: tableView: numberOfRowsInSection: ------获取某节的行数 tableView:cellForRowAtIndexPath: -------Cell数据的实现 numberofSectionInTableView: ----------获取节数