MongoDB教程
+ -

MongoDB 覆盖索引查询

2019-09-09 15 0

官方的MongoDB的文档中说明,覆盖查询是以下的查询:

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

由于所有出现在查询中的字段是索引的一部分, MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引的查询结果。
因为索引存在于RAM中,从索引中获取数据比通过扫描文档读取数据要快得多。

使用覆盖索引查询

为了测试覆盖索引查询,使用以下 users 集合:

{
   "_id": ObjectId("53402597d852426020000002"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "gender": "M",
   "name": "Tom Benzamin",
   "user_name": "tombenzamin"
}

我们在 users 集合中创建联合索引,字段为 gender 和 user_name :

>db.users.ensureIndex({gender:1,user_name:1})

现在,该索引会覆盖以下查询:

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

也就是说,对于上述查询,MongoDB的不会去数据库文件中查找。相反,它会从索引中提取数据,这是非常快速的数据查询。
由于我们的索引中不包括 id 字段,id在查询中会默认返回,我们可以在MongoDB的查询结果集中排除它。
下面的实例没有排除id,查询就不会被覆盖:

>db.users.find({gender:"M"},{user_name:1})

最后,如果是以下的查询,不能使用覆盖索引查询:

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

0 篇笔记 写笔记

C# 索引器(Indexer)
索引器(Indexer) 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚 拟数组(virtualarray) 一样。您可以使用数组访问运算符([ ])来访问该类的实例。语法一维索引器的语法如下:element-type this[int index] { /......
MongoDB 覆盖索引查询
官方的MongoDB的文档中说明,覆盖查询是以下的查询:所有的查询字段索引的一部分所有的查询返回字段在同一个索引中由于所有出现在查询中的字段索引的一部分, MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引查询结果。因为索引存在于RAM中,从索引中获取数据比通过扫描文档读取......
MongoDB 关系
MongoDB 的关系表示多个文档之间在逻辑上的相互联系。文档间可以通过嵌入和引用来建立联系。MongoDB 中的关系可以是:1:1 (1对1)1: N (1对多)N: 1 (多对1)N: N (多对多) 接下来我们来考虑下用户与用户地址的关系。一个用户可以有多个地址,所以是一对多的关系。以下是 u......
Java subSequence() 方法
subSequence() 方法返回一个新的字符序列,它是此序列的一个子序列。语法public CharSequence subSequence(int beginIndex, int endIndex)参数beginIndex -- 起始索引(包括)。endIndex -- 结束索引(不包括)。返......
MongoDB 索引限制
额外开销每个索引占据一定的存储空间,在进行插入,更新和删除操作时也需要对索引进行操作。所以,如果你很少对集合进行读取操作,建议不使用索引。内存(RAM)使用由于索引是存储在内存(RAM)中,你应该确保该索引的大小不超过内存的限制。如果索引的大小大于内存的限制,MongoDB会删除一些索引,这将导致性......
SQLite 查询语句select
select用于数据库库记录,其查询结果以表的形式展示合用户。语法select语句在查询时需指定需要是查询的表名,查询的列名(如果需要查询所有列,可以用*来代替)和查询条件。查询条件是可根据实际需要指定,如不指定,则默认情况是查询所有数据。查询指定的列,各个列之间通过,分隔开SELECT c......
GO语言 范围(Range)
Go 语言中 range 关键字用于 for循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引索引对应的值,在集合中返回key-value 对的 key 值。实例package mainimport "fmt&q......
C# 集合(Collection)
集合(Collection)类是专门用于数据存储和检索的类。这些类提供了对栈(stack)、队列(queue)、列表(list)和哈希表(hashtable)的支持。大多数集合类实现了相同的接口。集合(Collection)类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建......
MySQL 索引
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,......
PHP MySQL Select查询数据
PHP mysql_query()函数用于执行select查询。 由于从PHP 5.5版本起,不推荐使用mysql_query()函数。现在,建议使用以下2种替代方法之一。mysqli_query()PDO::__query()在select查询中还有两个其他的MySQLi函数。mysqli_num......
C# 排序列表(SortedList)
SortedList 类代表了一系列按照键来排序的 键 /值对,这些键值对可以通过键和索引来访问。排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(Hashtable)。集合......
MySQL ALTER命令
当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令。开始本章教程前让我们先创建一张表,表名为:testalter_tbl。root@host# mysql -u root -p password;Enter password:*******mysql> use ......
MongoDB 全文检索
全文检索对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。MongoDB 从 2.4 版本开始支持全文检索,目前支持15种语言的全文索引。danishdutc......
MySQL Order by排序
我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据。如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。语法以下是 SQL SELECT 语句使用 ORDER BY 子句将查询数据排序后再......
Java Bitset类
一个Bitset类创建一种特殊类型的数组来保存位值。BitSet中数组大小会随需要增加。这和位向量(vector of bits)比较类似。这是一个传统的类,但它在Java 2中被完全重新设计。BitSet定义了两个构造方法。第一个构造方法创建一个默认的对象:BitSet()第二个方法允许用户指定初......
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!