返回顶部
首页 > 资讯 > 数据库 >mongodb 索引相关
  • 517
分享到

mongodb 索引相关

2024-04-02 19:04:59 517人浏览 薄情痞子
摘要

1.索引的相关介绍:mongGodb的索引也是一颗平衡二叉树,所以在传统数据库中的绝大部分的索引优化技术也是可用的.注意:mongoDB可以在任意方向上对数据进行遍历(这点和关系数据库中的索引不一样),但这

1.索引的相关介绍:

mongGodb的索引也是一颗平衡二叉树,所以在传统数据库中的绝大部分的索引优化技术也是可用的.

注意:mongoDB可以在任意方向上对数据进行遍历(这点和关系数据库中的索引不一样),但这个仅限于单键排序,对于多键排序索引的方向还是比较重要的.

下面是个单键排序无方向性的具体的例子:

mongodb 索引相关

 

上面是两个查询的执行计划,红色部分的参数表示,查询是否在内存中有排序操作,

从上面的例子中可以很明显的看出,无论是按照iage的降序还是升序排序,查询都没有在内存中有排序操作.

 

2.mongodb 中的索引类型比较多,我这里仅仅列出比较常见的索引类型,更多的索引类型,参见Http://www.cnblogs.com/xinghebuluo/arcHive/2011/12/19/2293043.html

 

唯一索引:它保证跟已有文档的索引关键字重复的文档不会被插入

mongodb 索引相关

 

上面的的例子中已成功创建一个唯一索引.

 

 

复合唯一索引:多个键值组合的唯一索引。

复合唯一索引实例:

mongodb 索引相关

 

创建唯一索引的注意事项:

(1)唯一索引和不存在的关键字:

当保存到集合中的文档在索引字段没有值的话,它的索引字段会被赋值为null然后插入。就是说,你不可能在唯一索引中插入多个在某个索引字段都没有值的文档。(多个null值被认为是相等的值)

以下实例在唯一索引字段上插入多个null值报错.

 mongodb 索引相关


 

(2).对已经存在的重复值的字段创建唯一索引.

   如果直接创建唯一索引肯定是会报错的.

mongodb 索引相关

 

(3).如果一定要在这样的字段上创建唯一索引,可以在创建唯一索引的时候指定一个关键字dropDups来强制创建索引.但是这种创建索引的方法会删除集合中的数据,所以不建议使用这种方法。

 

使用dropDups强制创建索引范例:

mongodb 索引相关

 

 

稀疏索引:在mongdo的集合中,每个文档的键值对可以不一样(行的列数不一样),那么在一个索引中,字段可能在某个文档中,也有可能不在某个文档中,当字段不在某个文档中的时候,查询利用索引得到数据时默认情况下会将没有这个字段的文档查询出来.

mongodb 索引相关

以上实例中的查询,通过索引iage 得到了数据,但是将不包含iage字段的文档也查询出来了,  

这个时候可以通过稀疏索引将那些没有包含索引字段的文档过滤掉.

 

以下是一个通过稀疏索引过滤不包含索引字段的的文档的例子:

从执行计划中可以看到,查询是通过稀疏索引得到数据的,并且查询出来的结果集中全部包含iage字段(过滤掉了没有包含iage的文档).

mongodb 索引相关

 

3.索引管理:

查看制定集合下的索引信息       :db.collection.getIndexes();

查看当前架构下的所有索引信息   :db.system.indexes.find({});

创建索引:db.collection.ensureIndex({key:1}},{unique:true,dropDups:true});

hint({}):强制使用某个键值(索引)

还可以在后台建立索引db.collection.ensureindex({someFiled:1},{background:1})

优点:定期释放,以便客服端写入数据.

缺点:耗时较长

前台建立索引(默认):

优点:耗时相对较少

缺点:索引创建期间客服端不能写入数据


删除索引:db.collection.dropIndexes() ,db.collection.dropIndex(index)

重建索引:db.test.reIndex()

标识索引: db.collection.ensureIndex({key:1}},{name:"Index_name"});  

 

(1):查看指定集合的所有索引:db.colleciton.getIndexes();

 mongodb 索引相关

 

 

(2)查看当前架构下的所有索引信息   :db.system.indexes.find({});

 mongodb 索引相关

 

(3)创建索引:db.collection.ensureIndex({key:1},{unique:true,dropDups:true,sparse:true})

  上面是创建索引的标准语法,第二个大括号({unique:true,dropDups:true,sparse:true})为索引类型参数。

  Unique:表示唯一索引。

  Sparse:表示稀疏索引.

  dropDups:当索引字段中存在重复值时,强制删除重复的文档,该参数会丢失数据,不建议使用该参数.

 

(4)hint({}):强制使用某个键值(索引)

下面实例中,从执行计划可以看出,强制使用索引了。

 

mongodb 索引相关

 

 

(5).删除索引:db.collection.dropIndexes() ,db.collection.dropIndex(index)

   

  db.collection.dropIndexes():删除集合下面的所有索引.

  

mongodb 索引相关

 

集合test下面已经没有可删除的索引,_id_ 是系统自带的索引,无法手动删除.

 

  db.collection.dropIndex(index_name):删除指定索引

  mongodb 索引相关

 

 

(6).当索引效率低下的时候(可能是碎片较多),就需要重建索引了。db.test.reIndex() 。

  db.test.reIndex():重建索引

mongodb 索引相关

 

重建单个索引或是 集合下的所有索引。

 

  

4.执行计划解读:

正确解读一个查询的执行计划是优化查询的第一步,所以必须准确的读懂查询的执行计划:

mongodb 索引相关

 







 

 

 

您可能感兴趣的文档:

--结束END--

本文标题: mongodb 索引相关

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

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

猜你喜欢
  • mongodb 索引相关
    1.索引的相关介绍:monggodb的索引也是一颗平衡二叉树,所以在传统数据库中的绝大部分的索引优化技术也是可用的.注意:mongodb可以在任意方向上对数据进行遍历(这点和关系数据库中的索引不一样),但这...
    99+
    2024-04-02
  • mongodb索引
    索引的原理当往某各个集合插入多个文档后,每个文档在经过底层的存储引擎持久化后,会有一个位置信息,通过这个位置信息,就能从存储引擎里读出该文档 MMAPv1:文件id+文件内offset WiredTiger...
    99+
    2024-04-02
  • MySql索引相关知识介绍
    下面一起来了解下MySql索引相关知识,相信大家看完肯定会受益匪浅,文字在精不在多,希望MySql索引相关知识这篇短内容是你想要的。          &n...
    99+
    2024-04-02
  • MongoDB之索引(全文索引)
    在一些信息管理平台上经常需要进行信息模糊查询,最早的时候是在某个字段上实现的模糊查询,但是这个时候返回的信息并不会很准确,因为只能够查A字段或者是B字段,而在MongoDB里面实现了非常简单的全文检索。 ...
    99+
    2024-04-02
  • MongoDB(八):索引
    1. 索引 索引支持查询的有效地提高效率。没有索引,MongoDB必须扫描集合的每个文档,以选择与查询语句匹配的文档。这种扫描效率很低,需要MongoDB处理大量的数据。 索引是特殊的数据结构,以易于遍历的形式存储数据集的一小部分。 索引存...
    99+
    2017-05-14
    MongoDB(八):索引
  • MongoDB索引(7)
    索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得 更快。MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧。 增加检索的效率. mongodb提供了索引的支持.(...
    99+
    2021-11-24
    MongoDB索引(7)
  • MongoDB的索引
    1、简介它就像是一本书的目录,如果没有它,我们就需要对整个书籍进行查找来获取需要的结果,即所说的全盘扫描;而有了目录(索引)之后就可以通过它帮我们定位到目标所在的位置,快速的获取我们想要的结果。2、演示第一...
    99+
    2024-04-02
  • [MongoDB] Index 索引
    ...
    99+
    2024-04-02
  • 【mysql】索引相关的个人总结
    重点参考: MySQL索引原理及慢查询优化 (美团技术分享网站):原理、示例优化都写的很好。 索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!:原理写的很好。 【从入门到入土】令人脱发的数据库底层设计:很详细...
    99+
    2016-06-26
    【mysql】索引相关的个人总结
  • oracle索引相关知识有哪些
    这篇文章主要讲解了“oracle索引相关知识有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“oracle索引相关知识有哪些”吧!一、什么是执行计划所谓执...
    99+
    2024-04-02
  • MongoDB用户相关
    2.可以优先创建标红的MongoDB用户 3.创建用户命令列表 创建用户一定要在具体的db下执行 use admin Root用户: db.createUser({user:"root", pwd:“pwd", roles:[{rol...
    99+
    2014-12-24
    MongoDB用户相关
  • MySql 存储引擎和索引相关知识总结
    存储引擎 什么是数据库存储引擎? 数据库引擎是数据库底层软件组件,不同的存储引擎提供不同的存储机制,索引技巧,锁定水平等功能,使用不同的数据库引擎,可以获得特定的功能 如何查看引擎? --如何查看数据库支持的引...
    99+
    2022-05-11
    MySql 存储引擎 MySql 索引 MySql 存储引擎和索引
  • 关于转储Oracle索引信息的相关命令
    #版本 Oracle 11g 1、转储索引信息   在获得索引Object_id后,执行以下命令   ALTER SESSION SET EVENTS 'immediate trace ...
    99+
    2024-04-02
  • mongodb中关于索引的知识有哪些
    这篇文章主要为大家展示了“mongodb中关于索引的知识有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mongodb中关于索引的知识有哪些”这篇文章吧。我...
    99+
    2024-04-02
  • 与B树索引相关的执行计划
    索引唯一扫描,索引范围扫描,索引全扫描,索引快速全扫描和索引跳跃式扫描。索引唯一扫描:SQL> create table employee(gender var...
    99+
    2024-04-02
  • 于位图索引相关的执行计划
        位图索引是oracle数据库里除B树索引之外的另外一种索引的类型,它主要用于数据仓库或者DSS系统。在数据仓库或DSS系统中,针对某些类型的sql,用位图索引...
    99+
    2024-04-02
  • MySQL索引的相关知识点有哪些
    本篇内容介绍了“MySQL索引的相关知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!索引介绍索引...
    99+
    2024-04-02
  • MongoDB笔记九——索引
    制造数据...
    99+
    2024-04-02
  • 关于对MongoDB索引的一些简单理解
    目录索引简介1.语法准备 2.数据准备: 3.索引 3.1 唯一索引 3.2 单键索引 3.3 多键索引 3.4 复合索引 3.5 交叉索引 3.6 部分索引 3.7覆盖索引 3.8...
    99+
    2024-04-02
  • mongodb建索引引起的问题
    建索引就是一个容易引起长时间写锁的问题,MongoDB 在前台建索引时需要占用一个写锁(而且不会临时放弃),如果集合的数据量很大,建索引通常要花比较长时间,特别容易引起问题。 解决的方法很简单,M...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作