iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >MongoDB中的索引是怎样的
  • 269
分享到

MongoDB中的索引是怎样的

2023-06-19 12:06:47 269人浏览 安东尼
摘要

本篇文章给大家分享的是有关MongoDB中的索引是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。索引就像图书的目录一样,可以让我们快速定位到需要的内容,关系型数据库中有索

本篇文章给大家分享的是有关MongoDB中的索引是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

索引就像图书的目录一样,可以让我们快速定位到需要的内容,关系型数据库中有索引,NoSQL中当然也有,本文我们就先来简单介绍下mongoDB中的索引。

索引创建

默认情况下,集合中的_id字段就是索引,我们可以通过getIndexes()方法来查看一个集合中的索引:

db.sang_collect.getIndexes()

结果如下:

[    {        "v" : 2,        "key" : {            "_id" : 1        },        "name" : "_id_",        "ns" : "sang.sang_collect"    }]

我们看到这里只有一个索引,就是_id

现在我的集合中有10000个文档,我想要查询x为1的文档,我的查询操作如下:

db.sang_collect.find({x:1})

这种查询默认情况下会做全表扫描,我们可以用上篇文章介绍的explain()来查看一下查询计划,如下:

db.sang_collect.find({x:1}).explain("executionStats")

结果如下:

{    "queryPlanner" : {    },    "executionStats" : {        "executionSuccess" : true,        "nReturned" : 1,        "executionTimeMillis" : 15,        "totalKeysExamined" : 0,        "totalDocsExamined" : 10000,        "executionStages" : {            "stage" : "COLLSCAN",            "filter" : {                "x" : {                    "$eq" : 1.0                }            },            "nReturned" : 1,            "executionTimeMillisEstimate" : 29,            "works" : 10002,            "advanced" : 1,            "needTime" : 10000,            "needYield" : 0,            "saveState" : 78,            "restoreState" : 78,            "isEOF" : 1,            "invalidates" : 0,            "direction" : "forward",            "docsExamined" : 10000        }    },    "serverInfo" : {    },    "ok" : 1.0}

结果比较长,我摘取了关键的一部分。我们可以看到查询方式是全表扫描,一共扫描了10000个文档才查出来我要的结果。实际上我要的文档就排第二个,但是系统不知道这个集合中一共有多少个x为1的文档,所以会把全表扫描完,这种方式当然很低效,但是如果我加上limit,如下:

db.sang_collect.find({x:1}).limit(1)

此时再看查询计划发现只扫描了两个文档就有结果了,但是如果我要查询x为9999的记录,那还是得把全表扫描一遍,此时,我们就可以给该字段建立索引,索引建立方式如下:

db.sang_collect.ensureIndex({x:1})

1表示升序,-1表示降序。当我们给x字段建立索引之后,再根据x字段去查询,速度就非常快了,我们看下面这个查询操作的执行计划:

db.sang_collect.find({x:9999}).explain("executionStats")

这个查询计划过长我就不贴出来了,我们可以重点关注查询要耗费的时间大幅度下降。

此时调用getIndexes()方法可以看到我们刚刚创建的索引,如下:

[    {        "v" : 2,        "key" : {            "_id" : 1        },        "name" : "_id_",        "ns" : "sang.sang_collect"    },    {        "v" : 2,        "key" : {            "x" : 1.0        },        "name" : "x_1",        "ns" : "sang.sang_collect"    }]

我们看到每个索引都有一个名字,默认的索引名字为字段名_排序,当然我们也可以在创建索引时自定义索引名字,如下:

db.sang_collect.ensureIndex({x:1},{name:"myfirstindex"})

此时创建好的索引如下:

{    "v" : 2,    "key" : {        "x" : 1.0    },    "name" : "myfirstindex",    "ns" : "sang.sang_collect"}

当然索引在创建的过程中还有许多其他可选参数,如下:

db.sang_collect.ensureIndex({x:1},{name:"myfirstindex",dropDups:true,background:true,unique:true,sparse:true,v:1,weights:99999})

关于这里的参数,我说一下:

name表示索引的名称
2.dropDups表示创建唯一性索引时如果出现重复,则将重复的删除,只保留第一个
3.background是否在后台创建索引,在后台创建索引不影响数据库当前的操作,默认为false
4.unique是否创建唯一索引,默认false
5.sparse对文档中不存在的字段是否不起用索引,默认false
6.v表示索引的版本号,默认为2
7.weights表示索引的权重

此时创建好的索引如下:

{    "v" : 1,    "unique" : true,    "key" : {        "x" : 1.0    },    "name" : "myfirstindex",    "ns" : "sang.sang_collect",    "background" : true,    "sparse" : true,    "weights" : 99999.0}

查看索引

上文我们介绍了getIndexes()可以用来查看索引,我们还可以通过totalIndexSize()来查看索引的大小,如下:

db.sang_collect.totalIndexSize()

删除索引

我们可以按名称删除索引,如下:

db.sang_collect.dropIndex("xIndex")

表示删除一个名为xIndex的索引,当然我们也可以删除所有索引,如下:

db.sang_collect.dropIndexes()

索引是个好东西,可以有效的提高查询速度,但是索引会降低插入、更新和删除的速度,因为这些操作不仅要更新文档,还要更新索引,MonGoDB限制每个集合上最多有64个索引,我们在创建索引时要仔细斟酌索引的字段。

以上就是MongoDB中的索引是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: MongoDB中的索引是怎样的

本文链接: https://www.lsjlt.com/news/296099.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MongoDB中的索引是怎样的
    本篇文章给大家分享的是有关MongoDB中的索引是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。索引就像图书的目录一样,可以让我们快速定位到需要的内容,关系型数据库中有索...
    99+
    2023-06-19
  • MongoDB复合索引引发的灾难是怎样的
    这期内容当中小编将会给大家带来有关MongoDB复合索引引发的灾难是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前情提要11月末我司商品服务的MongoDB主库曾...
    99+
    2024-04-02
  • mongodb中索引分类是怎样的以及如何创建索引
    mongodb中索引分类是怎样的以及如何创建索引,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。学习索引分类和创建索引:   &nbs...
    99+
    2024-04-02
  • MongoDB中二级索引和主索引的区别是什么
    MongoDB中的主索引是指集合中的_id字段,默认情况下_id字段会被自动创建并作为主索引。主索引是集合中的唯一索引,它保证了集合...
    99+
    2024-04-19
    MongoDB
  • mongoDB中加索引的原因是什么
    本篇文章给大家分享的是有关mongoDB中加索引的原因是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。为集合加索引mongodb支持内嵌属...
    99+
    2024-04-02
  • mongodb怎么查看命中的索引
    在MongoDB中,可以使用explain()方法来查看命中的索引。explain()方法会返回查询的执行计划,包括是否命中索引以及...
    99+
    2023-08-30
    mongodb
  • 关于mysql的索引是怎样的
    本篇文章给大家分享的是有关关于mysql的索引是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、mysql中的索引是什么?索引在mys...
    99+
    2024-04-02
  • MongoDB中索引怎么用
    小编给大家分享一下MongoDB中索引怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 在任何数...
    99+
    2024-04-02
  • MySQL索引结构是怎么样的
    这篇文章主要为大家展示了“MySQL索引结构是怎么样的”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL索引结构是怎么样的”这篇文章吧。数据库存储单位首先...
    99+
    2024-04-02
  • MongoDB中索引的示例分析
    这篇文章主要介绍MongoDB中索引的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、索引究竟是什么东西?大部分开发者接触索引,大概知道索引类似书的目录,你要找到想要的内容...
    99+
    2024-04-02
  • 由JavaScript的with 引发的探索是怎样的
    本篇文章给大家分享的是有关由JavaScript的with 引发的探索是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. 背景某天吃饭的时候突然想到,都说 w...
    99+
    2023-06-26
  • 基于Java的全文索引引擎Lucene是怎样的
    今天给大家介绍一下基于Java的全文索引引擎Lucene是怎样的。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。基于Java的全文索引引擎LuceneLucen...
    99+
    2023-06-03
  • 怎么在MongoDB中创建索引
    这期内容当中小编将会给大家带来有关怎么在MongoDB中创建索引,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MongoDB 创建索引的语法1.为普通字段添加索引,并且为...
    99+
    2024-04-02
  • mongodb删除索引的方法是什么
    在MongoDB中,可以使用db.collection.dropIndex()方法来删除索引。通过指定索引的名称或键名,即可删除该索...
    99+
    2024-03-08
    mongodb
  • mongodb查看索引的方法是什么
    要查看MongoDB中的索引,可以使用以下方法: 1、使用db.collection.getIndexes()方法来查看指定集合中的...
    99+
    2024-04-09
    mongodb
  • mongodb索引的实现原理是什么
    MongoDB使用B树(B-tree)索引来实现索引功能。B树是一种多叉树结构,每个节点可以有多个子节点。在B树中,所有节点都按照大...
    99+
    2024-04-10
    mongodb
  • Mongodb中使用B树索引的原因是什么
    这篇文章给大家介绍Mongodb中使用B树索引的原因是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  B树和B+树  开头,我们先回忆一下,B树和B+树的结构以及特点。  树内的...
    99+
    2024-04-02
  • MongoDB 中索引选择B-树的原因是什么
    这期内容当中小编将会给大家带来有关MongoDB 中索引选择B-树的原因是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、B-树和B+树的区别很明显,我们要想弄清楚...
    99+
    2024-04-02
  • 怎么查看mongodb集合的索引
    要查看MongoDB集合的索引,您可以使用以下两种方法:1. 使用MongoDB的索引管理命令:- 打开MongoDB shell,...
    99+
    2023-08-31
    mongodb
  • MySQL的覆盖索引与回表是怎样的
    今天就跟大家聊聊有关MySQL的覆盖索引与回表是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。两大类索引使用的存储引擎:MySQL5.7 In...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作