在MongoDB教程索引简介

1。指标的基础:

对mondb指数几乎是传统的关系数据库一样,它包含了一些基本的优化技术。以下是命令创建一个索引:

复制代码代码如下所示:

> db.test.ensureindex({用户名:1 })



可以通过以下名称成功地查看索引是否已成功建立:

复制代码代码如下所示:

> > db.test.getindexes()



删除索引的命令是:

复制代码代码如下所示:

> db.test.dropindex({用户名:1 })



在MonDB,我们还可以创建复合索引,如:

复制代码代码如下所示:

-数字1表示用户名密钥的索引以升序存储,- 1表示年龄键的索引以降序存储。

> db.test.ensureindex({用户名:1,年龄:1 })



在创建索引的时候,基于用户名和年龄的查询将使用索引,或基于用户名的查询也将利用这一指标,但仅基于年龄的查询不会使用这种复合指标。因此,如果你想使用一个复合指标,你必须包括第一个索引列的复合索引查询条件。然而,如果查询条件的关键值的顺序是在复合索引的创建顺序一致,MonDB可以帮助我们调整这个阶智能,使复合指数可用于查询等:

复制代码代码如下所示:

> db.test.find({年龄:30、用户名史蒂芬})



在上面的例子中的查询条件,mondb将动态调整前检索查询条件的文件的顺序,以便查询可以使用刚才创建的复合索引。

我们可以为嵌入式文档创建索引,并且规则与普通文档之间没有差别,例如:

复制代码代码如下所示:

> db.test.ensureindex({ 的评论。日期:1 })



对于上面创建索引,索引名mondb自动分配到新创建的指标,根据指标的键名和方向指数。下面的命令可以在创建索引时指定索引名称,例如:

复制代码代码如下所示:

> > db.test.ensureindex({用户名:1 },{名字:语句})



为收集的成长,它需要被索引的大量查询架次。如果排序不是为指标的关键,mondb需要所有的数据提取到内存并排序。所以在索引排序的情况下,如果数据量太大,进行排序记忆中,MonDB错将在这个时候。



两。唯一索引:

默认情况下创建的索引不是惟一的索引:

复制代码代码如下所示:

> db.test.ensureindex({用户名:1 },{独特:真})



如果用户名重复的文件重新插入时,MonDB将报告是提示重复键插入错误,如:

复制代码代码如下所示:

> db.test.insert({用户名:5 })

> db.test.insert({用户名:5 })

e11000重复键错误指数:测试。测试。$ userid_1 DUP KEY:{ 5 }:



如果用户密钥是不包括在插入的文档,文档中的关键字的值为null。如果插入多个类似的文件,mondb会报告同样的错误,如:

复制代码代码如下所示:

> db.test.insert({userid1 :5 })

> db.test.insert({userid1 :5 })

e11000重复键错误指数:测试。测试。$ userid_1 DUP KEY:{零}:



如果在创建惟一索引时已经发现了重复项,则在创建惟一索引时,可以帮助我们消除重复文档,只找到第一个文档,如:

-首先删除刚刚创建的惟一索引。

复制代码代码如下所示:

> db.test.dropindex({用户名:1 })

-插入测试数据以确保集合中有重复的键。

> > db.test.remove()

> db.test.insert({用户名:5 })

> db.test.insert({用户名:5 })

-创建唯一索引并消除重复数据。

> db.test.ensureindex({用户名:1 },{独特):真的,dropdups :真})

-查询结果确认索引创建时重复的键已被删除。

> > db.test.find()

{_id :ObjectId(4fe823c180144abd15acd52e ),用户名:5 }



我们还可以创建一个复合唯一索引,这是确保复合键惟一的唯一方法:

复制代码代码如下所示:

> db.test.ensureindex({用户名:1,年龄:1 },{独特:真})



三。使用说明:

解释是一种非常有用的工具,它可以帮助你获得大量关于查询的有用信息。只要在光标上调用该方法,就可以获得查询详细信息:

复制代码代码如下所示:

> > db.test.find解释()()。

{

光标:basiccursor

nscanned :1,

nscannedobjects :1,

n:1,

微:0,

nyields :0,

nchunkskips :0,

ismultikey :假,

indexonly :假,

indexbounds :{

}

}



解释返回查询的索引、耗时和扫描文档数量的统计信息。

光标:basiccursor 是指没有使用索引。

nscanned :1显示多少文件查询。

n:1表示返回的文档数。

Millis: 0 shows the time consuming of the entire query.



四。指标管理:

system.indexes集合包含的各指标的详细信息,所以下面的命令可以用来查询现有的指标,如:

复制代码代码如下所示:

> > db.system.indexes.find()



如果你创建的指标对现有的数据文件,可以执行下面的命令使MonDB可以在后台创建索引,所以没有其他操作将被创造的时候。但相比之下,在一个封锁的方式创建一个索引,使得整个创造更高效,但MonDB将不会在创作的时间接受其他操作。

复制代码代码如下所示:

> db.test.ensureIndex ({username: 1}, {background: true})