MongoDB覆盖索引查询

你可能听说过列索引是通过最大限度地减少查询所需的磁盘访问次数来优化查询性能的好方法。MongoDB 有一个字段索引的特定应用程序,称为覆盖索引查询(Covered Queries),其中查询的所有列都被进行索引。因为 MongoDB 不必检查除索引之外的任何文档,所以覆盖索引查询非常快。本节我们就来学习一下如何使用覆盖索引查询更快地查询数据。

10多年的玉田网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整玉田建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“玉田网站设计”,“玉田网站推广”以来,每个客户项目都认真落实执行。

什么是覆盖索引查询?

根据 MongoDB 官方文档,覆盖查询是一下查询:

  • 查询中的所有字段都是索引的一部分;
  • 查询中返回的所有字段都在同一索引中。

因为查询中的所有字段都是索引的一部分,所以 MongoDB 匹配查询条件并使用相同的索引返回结果,而不实际查看文档内部。由于索引存在于 RAM 中,从索引中获取数据比通过扫描文档获取数据快得多。

使用覆盖索引查询

假设在“users”集合中有以下文档:

{
        "_id" : ObjectId("603de64bd0fbb11d21e780dc"),
        "phone" : "15011226666",
        "birth" : "01-01-1991",
        "name" : "bianchengbang",
        "gender" : "M"
}

首先我们需要在“users”集合中的 gender 和 name 字段上创建一个复合索引,如下所示:

> db.users.createIndex({gender:1, name:1})
{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
}

现在,这个索引将包含以下查询:

> db.users.find({gender:"M"},{name:1,_id:0})
{ "name" : "bianchengbang" }

也就是说,对于上面的查询,MongoDB 不会查看数据库文档。相反,它将从索引数据中获取所需的数据,这样的查询速度是非常快的。

因为我们的索引中不包含 _id 字段,所以我们已经从查询的结果集中排除了它,因为 MongoDB 在默认情况下会在每个查询中返回 _id 字段,所以下面的查询不会包含在上面创建的索引中:

> db.users.find({gender:"M"}, {name:1})
{ "_id" : ObjectId("603de64bd0fbb11d21e780dc"), "name" : "bianchengbang" }

另外,如果是以下的查询,也不能使用覆盖索引查询:

  • 所有索引字段是一个数组;
  • 所有索引字段是一个子文档。

网站标题:MongoDB覆盖索引查询
网址分享:http://www.shufengxianlan.com/qtweb/news30/296330.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联