在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})