MongoDB索引

这篇具有很好参考价值的文章主要介绍了MongoDB索引。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

索引支持在MongoDB中高效执行查询。如果没有索引,MongoDB必须扫描集合中的每个文档才能返回查询结果。如果查询存在适当的索引,MongoDB将使用该索引来限制它必须扫描的文档数。
尽管索引提高了查询性能,但添加索引对写入操作的性能有负面影响。对于具有高读写比率的集合,索引是昂贵的,因为每次插入都必须更新任何索引。

下图说明了一个查询,该查询选择并排序 使用索引匹配文档:

MongoDB索引,MongoDB,mongodb,数据库

一、用例

如果应用程序在相同的字段上重复运行查询,则可以在这些字段上创建索引以提高性能。例如,考虑以下场景:

Scenario

Index Type

人力资源部门通常需要按员工ID查找员工。您可以在员工ID字段上创建索引,以提高查询性能。

Single Field Index

销售人员通常需要按位置查找客户信息。位置存储在一个嵌入的对象中,其中包含州、城市和邮政编码等字段。可以在整个位置对象上创建索引,以提高该对象中任何字段的查询性能。

Single Field Index on an object

杂货店经理通常需要按名称和数量查找库存项目,以确定哪些项目库存不足。您可以在项目和数量字段上创建单个索引,以提高查询性能。

Compound Index

二、Details

索引是特殊的数据结构,以易于遍历的形式存储集合数据集的一小部分。MongoDB索引使用B树数据结构。
索引存储特定字段或字段集的值,按字段值排序。索引项的排序支持有效的相等匹配和基于范围的查询操作。此外,MongoDB可以使用索引中的顺序返回排序的结果。

三、限制

某些限制适用于索引,例如索引键的长度或每个集合的索引数。有关详细信息,请参阅索引限制。

四、默认索引

MongoDB在创建集合期间在_id字段上创建唯一索引。_id索引防止客户端插入两个文档,其中_id字段的值相同。不能删除此索引。

在分片集群中,如果不使用_id字段作为分片键,则应用程序必须确保_id字段中的值的唯一性,以防止出现错误。这通常是通过使用标准的自动生成的ObjectId来完成的。

五、索引名称

索引的默认名称是索引键和索引(1或-1)中每个键的方向的串联,使用下划线作为分隔符。例如,在{item:1,quantity:-1}上创建的索引的名称为item_1_quantity_-1。
索引一旦创建就不能重命名。相反,必须删除索引,然后用新名称重新创建索引。

六、Create an Index

索引支持在MongoDB中高效执行查询。如果应用程序在相同的字段上重复运行查询,则可以在这些字段上创建索引,以提高这些查询的性能。
要创建索引,请使用createIndex()shell方法或驱动程序的等效方法。本页显示MongoDB Shell和驱动程序的示例。

1、关于此任务

在MongoDB Shell或驱动程序中运行创建索引命令时,MongoDB仅在不存在相同规范的索引时创建索引。
尽管索引提高了查询性能,但添加索引对写入操作的性能有负面影响。对于具有高读写比率的集合,索引是昂贵的,因为每次插入和更新都必须更新任何索引。

2、Procedure

要设置此页面上示例的语言,请使用右侧导航窗格中的选择语言下拉菜单。

要使用Async Java驱动程序创建索引,请使用com.mongodb.Async.client.MongoCollection.createIndex。

collection.createIndex( <key and index type specification>, <options>, <callbackFunction>)

本例在名称字段上创建单键降序索引:

collection.createIndex(Indexes.descending("name"), someCallbackFunction());


db.blog.createIndex(
   {
     content: "text",
     "users.comments": "text",
     "users.profiles": "text"
   },
   {
     name: "InteractionsTextIndex"
   }
)

结果要确认索引已创建,请使用mongosh运行db.collection.getIndexes()方法:

db.collection.getIndexes()

输出:

[
  { v: 2, key: { _id: 1 }, name: '_id_' },
  { v: 2, key: { name: -1 }, name: 'name_-1' }
]

3、指定索引名称

创建索引时,可以为索引指定自定义名称。为索引命名有助于区分集合上的不同索引。例如,如果索引具有不同的名称,则可以更容易地在查询计划的解释结果中标识查询使用的索引。
要指定索引名称,请在创建索引时包含名称选项:

db.<collection>.createIndex(
   { <field>: <value> },
   { name: "<indexName>" }
)

默认索引名称
如果在创建索引期间未指定名称,则系统通过用下划线连接每个索引键字段和值来生成名称。例如:

Index

Default Name

{ score : 1 }

score_1

{ content : "text", "description.tags": "text" }

content_text_description.tags_text

{ category : 1, locale : "2dsphere"}

category_1_locale_2dsphere

{ "fieldA" : 1, "fieldB" : "hashed", "fieldC" : -1 }

fieldA_1_fieldB_hashed_fieldC_-1

4、Drop an Index

可以从集合中删除特定索引。如果看到对性能的负面影响、希望用新索引替换它或不再需要索引,则可能需要删除索引。
要删除索引,请使用以下shell方法之一:

Method

Description

db.collection.dropIndex()

从集合中删除特定索引。

db.collection.dropIndexes()

删除索引集合或索引数组中的所有可移动索引(如果指定)。

5、Index Types

此页面描述可以在MongoDB中创建的索引类型。不同的索引类型支持不同类型的数据和查询。

Single Field Index

单字段索引从集合中每个文档的单个字段中收集和排序数据。
此图显示单个字段上的索引,分数:

MongoDB索引,MongoDB,mongodb,数据库

复合索引
复合索引收集和排序来自集合中每个文档中两个或多个字段的数据。数据按索引中的第一个字段分组,然后按每个后续字段分组。
例如,下图显示了一个复合索引,其中文档首先按用户ID按升序(字母顺序)分组。然后,每个用户ID的分数按降序排序: 

MongoDB索引,MongoDB,mongodb,数据库

多键索引
多键索引收集和排序存储在数组中的数据。
不需要显式指定多键类型。在包含数组值的字段上创建索引时,MongoDB会自动将索引设置为多键索引。
此图显示addr.zip字段上的多键索引: 

MongoDB索引,MongoDB,mongodb,数据库

地理空间索引
地理空间索引提高了查询地理空间坐标数据的性能。要了解更多信息,请参见地理空间索引。
MongoDB提供两种类型的地理空间索引: 

  • 使用平面几何图形返回结果的2d索引。
  • 使用球形几何体返回结果的2dsphere索引。

文本索引
文本索引支持对包含字符串内容的字段进行文本搜索查询。 

哈希索引
哈希索引支持哈希切分。哈希索引索引字段值的哈希。

聚集索引
5.3版中的新增功能。
聚集索引指定聚集集合存储数据的顺序。使用聚集索引创建的集合称为聚集集合。

七、Create a Compound Index

复合索引是包含对多个字段的引用的索引。复合索引提高了对索引中的字段或索引前缀中的字段进行精确查询的性能。
要创建复合索引,请使用db.collection.createIndex()方法:

db.<collection>.createIndex( {
   <field1>: <sortOrder>,
   <field2>: <sortOrder>,
   ...
   <fieldN>: <sortOrder>
} )

1、限制

在单个复合索引中最多可以指定32个字段。

开始之前
创建包含以下文档的学生集合:

db.students.insertMany([
   {
      "name": "Alice",
      "gpa": 3.6,
      "location": { city: "Sacramento", state: "California" }
   },
   {
      "name": "Bob",
      "gpa": 3.2,
      "location": { city: "Albany", state: "New York" }
   }
])

2、Procedure

以下操作创建包含名称和gpa字段的复合索引:

db.students.createIndex( {
   name: 1,
   gpa: -1
} )

在此示例中:

  • 名称上的索引是升序的(1)。
  • gpa上的索引正在下降(-1)。

3、Results 

创建的索引支持选择以下项的查询:

  • 名称和gpa字段。
  • 仅名称字段,因为名称是复合索引的前缀。

例如,索引支持以下查询:文章来源地址https://www.toymoban.com/news/detail-731451.html

db.students.find( { name: "Alice", gpa: 3.6 } )

db.students.find( { name: "Bob" } )

到了这里,关于MongoDB索引的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MongoDB数据库从入门到精通系列文章之:MongoDB数据库百篇技术文章汇总

    MongoDB数据库系列文章持续更新中: 更多数据库内容请阅读博主数据库专栏,数据库专栏涵盖了Mysql、SQLServer、PostgreSQL、MongoDB、Oracle、Cassandra等数据库 数据库专栏 文章名称 文章链接 数据库安装部署系列之:部署Mongodb5.0.6高可用集群详细步骤 数据库安装部署系列之:部署M

    2024年02月11日
    浏览(59)
  • mongodb 数据库管理(数据库、集合、文档)

    目录 一、数据库操作 1、创建数据库 2、删除数据库 二、集合操作 1、创建集合 2、删除集合 三、文档操作 1、创建文档 2、 插入文档 3、查看文档 4、更新文档 1)update() 方法 2)replace() 方法 创建数据库的语法格式如下: 如果数据库不存在,则创建数据库,否则切换到该数据

    2024年02月12日
    浏览(52)
  • MongoDb数据库

    1.显示所有数据库: show dbs 2.切换到指定数据库,如果没有则自动创建数据库 use databaseName 3.显示当前所在数据库 db 4.删除当前数据库 use 库名 db.dropDatabase() 1.创建集合 db.createCollection(\\\'集合名称\\\') 2.显示当前数据库中所有集合 show colletions  3.删除某个集合 db.xxx.drop(); 4.重命名集

    2024年02月04日
    浏览(56)
  • Mongodb连接数据库

    npm init   npm i mongoose  const mongoose=require(\\\"mongoose\\\") mongoose.connect(\\\"mongodb://127.0.0.1:27017/user\\\") 说明:mongodb是协议,user是数据库,如果没有会自动创建user数据库 。 node 文件名     mongoose.disconnect()

    2024年02月15日
    浏览(65)
  • MongoDB数据库安装

    MongoDB数据的特点: 面相文档存储的分布式数据库 具有很强的扩展性 支持丰富的查询表达式,很接近于关系性数据库 使用类似于json的结构保存数据,可以轻易的查询到文档中内嵌的对象及数组 首先去官网下载安装包 Download MongoDB Community Server | MongoDB 启动MongoDB数据的服务 可

    2024年02月11日
    浏览(58)
  • mongodb数据库操作

    1、启动mongodb 在mongodb启动命令中 --dbpath 指定mongodb的数据存储路径 --logpath 指定mongodb的日志存储路径 2、停止mongodb 第一步先进入mongo命令行模式 第二步,使用use admin 命令进入admin数据库 第三步,执行 db.shutdownServer()命令 停止服务。代码及显示如下:  2 、导出Mongodb数据 mon

    2024年02月09日
    浏览(51)
  • 【数据库MongoDB】MongoDB与大数据关系以及MongoDB中重要的进程:mongod进程与mongo进程关系

    云计算的定义有多种说法,对于到底什么是云计算,我们至少可以找到100种解释。目前广为接受的是美国国家标准与技术研究院定义: 云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器

    2024年02月02日
    浏览(70)
  • python数据库——Mongodb

    MongoDB 是一个开源的 NoSQL数据库系统,它是一个面向文档的数据库,使用 JSON 格式来存储和查询数据。MongoDB 是一个非关系型数据库,它的设计目标是以高性能、高可用性和可扩展性为特点,适用于处理大量的非结构化数据。 特点: MongoDB 是一个面向文档存储的数据库,操作

    2024年02月07日
    浏览(61)
  • MongoDB 数据库详细介绍

    MongoDB(来自“Humongous”,意为巨大的)是一个开源、高性能、无模式(NoSQL)、文档导向的分布式数据库。它以其灵活性、可扩展性和强大的查询功能而闻名于世。MongoDB 使用 JSON 格式的文档来存储数据,适用于多种应用场景,包括 Web 应用、移动应用、日志存储、大数据等。

    2024年02月12日
    浏览(67)
  • MongoDB:数据库初步应用

    1.MongoDBCompass连接数据库 连接路径:mongodb://用户名:密码@localhost:27017/ 2.创建数据库(集合) MongoDB中数据库被称为集合.  MongoDBCompass连接后,点击红色框加号创建集合,点击蓝色框加号创建文档(数据表) 文档中的数据结构(相当于表中的列)设计不用管,添加数据的时候,自动创建列和数

    2024年02月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包