索引基本使用

索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得 更快。MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查 询优化技巧。

首先我们有个数据库,并且创建一个集合students,插入一些数据

创建索引的命令

db.students.ensureIndex({"name":1}) // 表示将name字段设置为索引

获取当前集合的索引

db.students.getIndexes() 

删除索引的命令

db.students.dropIndex({"name":1})

在 MongoDB 中,我们同样可以创建复合索引,如: 数字 1 表示 name 键的索引按升序存储,-1 表示 age 键的索引按照降序方式存储。

db.students.ensureIndex({"name":1, "age":-1})

该索引被创建后,基于 name 和 age 的查询将会用到该索引,或者是基于 name 的查询也会用到该索引,但是只是基于 age 的查询将不会用到该复合索引。

因此可以说, 如果想用到复合索引,必须在查询条件中包含复合索引中的前 N 个索引列。

然而如果查询 条件中的键值顺序和复合索引中的创建顺序不一致的话,MongoDB 可以智能的帮助我们调 整该顺序,以便使复合索引可以为查询所用。如:

db.students.find({"age": 20, "name": "蜜蜜"})

唯一索引 

在缺省情况下创建的索引均不是唯一索引。下面的示例将创建唯一索引,如:

db.students.ensureIndex({"name":1},{"unique":true})

如果再次插入 userid 重复的文档时,MongoDB 将报错,以提示插入重复键,如:

db.students.insert( {"name" : "张三", "sex" : "男", "age" : 19, "score" : 59, "address" : "南山区" })
db.students.insert( {"name" : "张三" })

如果插入的文档中不包含 userid 键,那么该文档中该键的值为 null,如果多次插入类似 的文档,MongoDB 将会报出同样的错误,如:

db.students.insert( {"name1" : "张三", "sex" : "男", "age" : 19, "score" : 59, "address" : "南山区" })

db.students.insert( {"name1" : "张三", "sex" : "男", "age" : 19, "score" : 59, "address" : "南山区" })
db.students.insert( {"name1" : "张三" })

如果在创建唯一索引时已经存在了重复项,我们可以通过下面的命令帮助我们在创建唯 一索引时消除重复文档,仅保留发现的第一个文档(疑问),如:

先删除刚刚创建的唯一索引

db.students.dropIndex({"name":1})

插入测试数据,以保证集合中有重复键存在

db.students.insert( {"name" : "张三", "sex" : "男", "age" : 19, "score" : 59, "address" : "南山区" })
db.students.insert( {"name" : "张三", "sex" : "男", "age" : 19, "score" : 59, "address" : "南山区" })

重新创建唯一索引

db.students.ensureIndex({"name":1},{"unique":true})

结果发现创建唯一索引不成功,还可以继续添加重复健的数据

索引的一些参数

explain executionStats 查询具体的执行 时间

// 关注输出的如下数值:explain.executionStats.executionTimeMillis
db.students.find().explain( "executionStats" )

执行结果executionTimeMillis 为0,示因为我们这边数据太少了

MongoDB 索引 和 explain 的使用的更多相关文章

  1. 二十五、MongoDB 索引 和 explain 的使用

    一.索引基础 索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更快.MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧.创建索引的命 ...

  2. MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划

    这篇文章主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下 一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存 ...

  3. MongoDB 索引 .explain("executionStats")

    MongoDB干货系列2-MongoDB执行计划分析详解(3) http://www.mongoing.com/eshu_explain3 MongoDB之使用explain和hint性能分析和优化 ...

  4. MongoDB 索引相关知识

    背景: MongoDB和MySQL一样,都会产生慢查询,所以都需要对其进行优化:包括创建索引.重构查询等.现在就说明在MongoDB下的索引相关知识点,可以通过这篇文章MongoDB 查询优化分析了解 ...

  5. MongoDB(索引及C#如何操作MongoDB)(转载)

    MongoDB(索引及C如何操作MongoDB) 索引总概况 db.test.ensureIndex({"username":1})//创建索引 db.test.ensureInd ...

  6. MongoDB基础教程系列--第六篇 MongoDB 索引

    使用索引可以大大提高文档的查询效率.如果没有索引,会遍历集合中所有文档,才能找到匹配查询语句的文档.这样遍历集合中整个文档的方式是非常耗时的,特别是处理大数据时,耗时几十秒甚至几分钟都是有可能的. 创 ...

  7. MongoDB 索引篇

    MongoDB 索引篇 索引的简介 索引可以加快查询的速度,但是过多的索引或者规范不好的索引也会影响到查询的速度.且添加索引之后的对文档的删除,修改会比以前速度慢.因为在进行修改的时候会对索引进行更新 ...

  8. MongoDB索引,性能分析

    索引的限制: 索引名称不能超过128个字符 每个集合不能超过64个索引 复合索引不能超过31列 MongoDB 索引语法 db.collection.createIndex({ <field&g ...

  9. MongoDB索引原理

    转自:http://www.mongoing.com/archives/2797 为什么需要索引? 当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下M ...

随机推荐

  1. 2019 用友网络java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条. 用友网络等公司offer,岗位是Java后端开发,最终选择去了 用友网络. 面试了很多家公司,感觉大部分公司考察 ...

  2. loj#10013 曲线(三分)

    题目 #10013. 「一本通 1.2 例 3」曲线 解析 首先这个题保证了所有的二次函数都是下凸的, \(F(x)=max\{s_i(x)\}i=1...n\)在每一个x上对应的最大的y,我们最后得 ...

  3. Python进阶----计算机基础知识(操作系统多道技术),进程概念, 并发概念,并行概念,多进程实现

    Python进阶----计算机基础知识(操作系统多道技术),进程概念, 并发概念,并行概念,多进程实现 一丶进程基础知识 什么是程序: ​   程序就是一堆文件 什么是进程: ​   进程就是一个正在 ...

  4. 【开发笔记】- 安装Git命令

    1.查看linux版本信息: $ cat /etc/redhat-release 2.输入命令安装git: $ yum install git 3.等待下载,自动安装完毕,查看git版本 $ git ...

  5. 动画 VUE基础回顾8

    过渡和动画 使用<transition> 组件包裹 例: <transition name="fade"> <div v-if="true& ...

  6. Oracle建立连接的过程分析

    Oracle建立连接的过程 如果我们想登陆数据库并在数据库中真正做事情,就必须先建立连接,首先我会介绍如何建立连接,再介绍建立连接的两种方式的原理,以及建立连接的过程中在客户端和服务端都做了些什么. ...

  7. tf常见的损失函数(LOSS)汇总

    损失函数在机器学习中用于表示预测值与真实值之间的差距.一般而言,大多数机器学习模型都会通过一定的优化器来减小损失函数从而达到优化预测机器学习模型参数的目的. 哦豁,损失函数这么必要,那都存在什么损失函 ...

  8. iOS OpenCV资料收集

    OpenCV iOS Title: OpenCV iOS Hello Compatibility: > OpenCV 2.4.3 Author: Charu Hans You will lear ...

  9. 【书评:Oracle查询优化改写】第14章 结尾章

    [书评:Oracle查询优化改写]第14章 结尾章 一.1  相关参考文章链接 前13章的链接参考相关连接: [书评:Oracle查询优化改写]第一章 http://blog.itpub.net/26 ...

  10. Linux 用户账号与权限管理

    在Linux中,如何管理用户.管理权限?请看下文,谢谢配合. 用户.组概述 用户分类 超级用户:root,人为交互最高权限用户,system为最高权限用户. 普通用户:通过管理管理员创建,权限受到一定 ...