说到索引,大家肯定都在关系型数据库或多或少接触过,它的主要目的是加速查询的速度。MongoDB作为一种数据库,当然也提供了索引的操作。

我们先插入1万条测试数据。

首先,我们先来看看不加索引查找name为"p10000"的文档的执行计划,使用explain()函数。

这里注意一点,MongoDB 3.0开始之后的版本使用explain() 需要填写参数,"queryPlanner","executionStats","allPlansExecution",如果不添加参数,默认为"queryPlanner"。

所以,我们要查看查询花费的时间,需要加上参数"executionStats"。

executionTimeMillis:  执行花费了4毫秒。

taotalDocsExamined:  扫描了10000个文档。

先不做评论。看看之后加上索引会是什么结果。

> 索引命令(ensureIndex)

下面为name字段加上索引。

我们来看下加上索引后的执行计划。

executionTimeMillis:  执行花费了0毫秒。

taotalDocsExamined:  扫描了1个文档。

对比一下没加索引之前的执行计划,可以看到两者速度相差不是一点点。

> 索引名称

手动指定唯一性的索引名称是很有必要的,这也方便我们后期对索引进行维护。

下面我们还是对name建立索引,并且命名为"product_name_index"。

这里用到getIndexes()命令来查看集合中有哪些索引,我们看到刚刚创建的名为"product_name_index"的索引包含在列。

> 唯一索引

唯一索引,保证指定键在每一个文档中的值都是唯一的。创建唯一索引需要用到ensureIndex第二个参数,我们看下实例。

我们看到创建了唯一索引后,向集合里插入name为"p10000"的文档,插入失败,提示索引中的键值重复。

> 删除索引(dropIndex)

我们都知道索引能提高查询的效率,但是却会影响插入更新等操作的性能,所以有时候我们会根据业务的需要,实时的维护,删除不必要的索引。

 

有关索引的基本知识就介绍到这里,下一篇学习一下关于安全认证方面的知识。

MongoDB学习总结(四) —— 索引的基本用法的更多相关文章

  1. mongodb学习笔记之索引(转)

    一.索引基础:    MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧.下面是创建索引的命令:    > db.test.ensureIndex({" ...

  2. MongoDB学习(四)客户端工具备份数据库

    在上一篇MongoDB学习(三)中讲解了如何在服务器端进行数据的导入导出与备份恢复,本篇介绍下如何利用客户端工具来进行远程服务器的数据备份到本地. 以客户端工具MongoVUE为例来进行讲解: 1.首 ...

  3. MongoDB学习笔记四:索引

    索引就是用来加速查询的.创建数据库索引就像确定如何组织书的索引一样.但是你的优势是知道今后做何种查询,以及哪些内容需要快速查找.比如:所有的查询都包括"date"键,那么很可能(至 ...

  4. Mongodb学习笔记四(Mongodb聚合函数)

    第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...

  5. 【MongoDB学习之四】索引 聚合 备份与恢复 监控

    环境 MongoDB 4.0 CentOS 6.5_x64 一.索引语法ensureIndex()方法基本语法格式如下所示:>db.COLLECTION_NAME.ensureIndex({KE ...

  6. MongoDB学习笔记-04 索引

    索引是用来加速查询的.有了索引之后,数据库不必进行全表扫描,只需先在索引中查找,再根据找到的索引查找数据.MongoDB的索引几乎和传统关系型数据库一样. 创建索引 创建索引是在相应的集合中使用ens ...

  7. Python学习(四)cPickle的用法

    python中有两个类似的:pickle与cPickle:两者的关系:“cPickle – A faster pickle” pickle模块中的两个主要函数是dump()和load().dump() ...

  8. MongoDb学习(四)--Repository

    在学习这个的时候.关于Repository的映射.在备注xml的时候出现了错误. 错误有点坑.以后写的时候注意一点,在学习的时候.用的mongo的jar包版本比较低. 然而本机操作的时候,用的是最新版 ...

  9. vue3 学习笔记 (四)——vue3 setup() 高级用法

    本篇文章干货较多,建议收藏! 从 vue2 升级到 vue3,vue3 是可以兼容 vue2 的,所以 vue3 可以采用 vue2 的选项式API.由于选项式API一个变量存在于多处,如果出现问题时 ...

随机推荐

  1. hdu 2614

    #include<stdio.h> int map[99][99]; int vist[99]; int sum=1; int maxsum=1; int max=0; int N; vo ...

  2. MySQL导入sql脚本中文乱码设置和常用命令

    1. use database_name; 2. set names utf8; (或其他需要的编码) 3. source example.sql (sql文件存放路径) Mysql安装目录数据库目录 ...

  3. 《算法导论》习题2.3-6 改进的InsertSort

    InsertSort中有关键的一步是把当前元素A[i]插入到已经排好序的A[1,i-1]的合适的位置上,在原始的InsertSort算法中, 采用的是从后往前一步一步查找的方法,习题2.3-6要求利用 ...

  4. 打包程序时的证书问题(上传APP就出现Missing iOS Distribution signing indetity for)

    现象: 解决办法: 1.删除本地钥匙串中的这个文件,注意“系统”中的同名文件也必须删除 2.进入http://www.apple.com/certificateauthority/ 下载新的(WWDR ...

  5. iOS8 UISearchViewController搜索功能讲解

    在iOS8以前我们实现搜索功能需要用到UISearchbar和UISearchDisplayController, 在iOS8之后呢, UISearchController配合UITableView的 ...

  6. 使用Emacs中的org-mode写cnblogs之图片插入

    .title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium ...

  7. Xcode各版本官方下载

    官方下载, 用开发者账户登录,建议用Safari浏览器下载. 官方下载地址: https://developer.apple.com/xcode/downloads/ Xcode 66.4: http ...

  8. 深度学习caffe:Ubuntu16.04安装指南(1)

    caffe [CPU ONLY] 2017-01-15 最简单的安装配置方式: 不用GPU加速,使用OPENCV2.4图像库, 这是根据官方教程(链接如下)简化而得到. Ubuntu 16.04 or ...

  9. linux内核——1.概述

    1.结构 linux中,我们把操作系统分为内核空间和用户空间.用户通过用户空间与操作系统打交道.用户要通过系统调用访问内核空间.下图为Linux体系结构,shell应该为在最顶层. 系统调用,下面链接 ...

  10. Java Spring MVC项目搭建(二)——项目配置

    1.站点配置文件web.xml 每一个Spring MVC 项目都必须有一个站点配置文件web.xml,他的主要功能吗....有一位大哥已经整理的很好,我借来了,大家看看: 引用博客地址: http: ...