索引基本使用

索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得 更快。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. 特征选择之FeatureSelector工具

    项目地址:https://github.com/WillKoehrsen/feature-selector 特征选择(feature selection)是查找和选择数据集中最有用特征的过程,是机器学 ...

  2. zookeeper介绍(4)zookeeper的完整分布式

    参考: zookeeper的单机和伪分布式教程请参考:zookeeper介绍(1)zookeeper介绍与安装 Zookeeper的完整分布式集群搭建: 准备好三台centos主机:(在这我使用的是z ...

  3. 如何传递大文件(GB级别)

    一.拆分:压缩工具,压缩并拆分为多个小文件. 二.QQ离线传输 QQ离线文件有限制条件: 1.离线传送的文件,为用户保存7天,逾期接收方不接收文件,系统将自动删除该文件: 2. 离线传送的文件,单个文 ...

  4. C#-阿里云OSSAPI

    Nuget导入包 共用类 using System; using System.Collections.Generic; using System.IO; using System.Linq; usi ...

  5. Telnet,SSH1,SSH2,Telnet/SSL,Rlogin,Serial,TAPI,RAW(转)

    转载:https://www.cnblogs.com/yxwkf/p/4840675.html 一.Telnet 采用Telnet用来訪问远程计算机的TCP/IP协议以控制你的网络设备,相当于在离开某 ...

  6. 【Code Tools】AB性能测试工具(二)

    一.测试Get请求 1.每次并发请求10个,总共1000个请求 ab -n -c https://www.baidu.com/ 2.指定Header参数 通过-H来指定 ab -n -c -H 'Ac ...

  7. 使用kubeadm部署k8s

    k8s组件 master,node master中包括apiserver,scheduler,controller.etcd apiserver:负责接收用户请求,并且保存至etcd中. schedu ...

  8. Linux命令——chgrp、chown、chmod

    简介 这三个命令都用于更改文件permission(权限).即下图红框位置 除此之外还有个“连结”,那个指的是硬链接,不是软连接.FS使用inode区分不同文件,而目录树使用文件名区分不同文件,因此可 ...

  9. Xshell连接虚拟机中的Ubuntu

    虚拟机中安装好Ubuntu系统后使用cmd测试ping 设置xshell的连接ip 连接 连接失败 安装openssh-server sudo apt install openssh-server 再 ...

  10. 我感觉这个书上的微信小程序登陆写得不好

    基本功能是OK,但是感觉传的数据太多,不安全,需要改写. App({ d: { hostUrl: 'http://www.test.com/index.php', //请填写您自己的小程序主机URL ...