在mongodb中,当我们一个集合中的数据量非常大时,比如几百万条数据,如果不使用索引,对数据的查询就会进行全表扫描,这个时候查询的速度就会非常的慢,此时我们就需要为集合建立上索引,从而加快查询的速度。既然索引可以加快我们的查询速度,那么是否为集合的每个字段上都建立索引呢?这个显然是不正确的,虽然索引可以加快我们的查询速度,但是在插入、更新、删除数据时就会相应的变慢,因为此时需要维护索引,因此我们理性的在集合上创建索引。

建立索引的语法:

db.collections.createIndex({

key1 : 1,  // 表示为key1创建一个正序索引

key2 : -1 // 表示为key2创建一个倒叙索引

} ,{

background :true, // true : 表示后台创建索引 false:表示同步创建索引,会阻塞mongodb其余的操作

unique : true , // true: 表示创建唯一索引  false:表示非唯一。 对于散列索引,该选项无效。

name : 'index_1', // name 表示指定索引的名字,如果没有指定,mongodb会默认生成一个名字。

partialFilterExpression :null, // 表示根据某些条件建立索引,比如:为name=5的字段建立索引

sparse : true, // true: 表示建立稀疏索引,表示只有存在该字段时才在该字段上建立索引 false:不是稀疏索引

expireAfterSeconds : 10, //表示10秒后,该文档会被删除

weights : null // 表示权重,全文索引中指定字段的权重,默认情况下是1

default_language:'zhs', // 全文索引分词的语言,默认情况下是英文

......

});

默认的 _id 索引:

对应默认的_id索引,mongodb会默认为此字段加上一个唯一索引,且此索引无法删除。

建立一个单键索引:

db.persons.createIndex({"userId": 1}, {background:true,name:"index_01"});

上述表示在 userId上建立一个正序索引,在后台进行创建, 索引的名字是 index_01

创建一个复合索引:

db.persons.createIndex({"userId": 1,"age":-1}, {background:true,name:"index_02"})

注意:1、上述使用了 userId 和 age 创建了一个复合索引。

2、最多可以使用 31 个字段组合成复合索引

3、复合索引的创建时字段的顺序是有影响的,比如此时是userId然后是age,那么在进行数据查询时,使用userId查可以使用索引,使用userId和age查也可以使用索引,但是使用age和userId进行查是不会使用索引的。

4、总结上面的3就是,mongodb的复合索引,支持前缀查找,即查询的字段的顺序如果是创建字段的前缀时,则可以使用索引。比如:userId就是 userId和age的前缀,那么就可以使用索引。

全文索引:

地理位置索引:

查看集合上的索引:

db.persons.getIndexes()

删除集合上的索引:

// 删除索引名字是 index_01 的索引
db.persons.dropIndex("index_01");
// 删除所有的索引
db.persons.dropIndexes();

重新构建索引:

db.persons.reIndex()

该操作会删除这个集合上所有的索引,然后进行重新构建。

mongodb的索引操作的更多相关文章

  1. MongoDB:索引操作

    首先插入十万个数据 ;i;i++){ var rand = parseInt(i*Math.random()); db.person_test.insert({"name":&qu ...

  2. Mongodb学习笔记三(Mongodb索引操作及性能测试)

    第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...

  3. 【翻译】MongoDB指南/CRUD操作(二)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...

  4. 【翻译】MongoDB指南/CRUD操作(一)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...

  5. MongoDB各种查询操作详解

    这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下   一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...

  6. MongoDB数据库索引

    前面的话 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录.这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查 ...

  7. MongoDB数据库索引构建情况分析

    前面的话 本文将详细介绍MongoDB数据库索引构建情况分析 概述 创建索引可以加快索引相关的查询,但是会增加磁盘空间的消耗,降低写入性能.这时,就需要评判当前索引的构建情况是否合理.有4种方法可以使 ...

  8. MongoDB索引(一) --- 入门篇:学习使用MongoDB数据库索引

    这个系列文章会分为两篇来写: 第一篇:入门篇,学习使用MongoDB数据库索引 第二篇:进阶篇,研究数据库索引原理--B/B+树的基本原理 1. 准备工作 在学习使用MongoDB数据库索引之前,有一 ...

  9. MongoDB基本命令行操作

    1. 连接MongoDB: Mongodb://username:password@hostname/dbname 2. 创建数据库: use dbname:如果数据库不存在则创建数据库,否则切换到指 ...

随机推荐

  1. Excel导入保存附件和解析数据

    Excel导入保存附件和解析数据 一,前端上传附件的组件 1.先给一个下载模板的按钮 // 下载Excel模板 downLoadExcel: function () { window.open(GLO ...

  2. SpringBoot-异步定时-邮件任务

    目录 背景 异步任务 定时任务 邮件任务 背景 在我们的工作中,常常会用到异步处理任务,比如我们在网站上发送邮件, 后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功, 所以我们 ...

  3. IDEA SpotBugs代码安全审计插件

    IDEA SpotBugs代码安全审计插件 在寻找idea代码审计插件的时候,发现Findbugs已经停止更新,无法在idea2020.01版本运行,由此找到SpotBugs SpotBugs介绍 S ...

  4. Spring5框架学习笔记

    Spring5学习笔记 介绍: 1.引入相应jar包 导入: ps:网上下载教程: https://repo.spring.io/release/org/springframework/spring/ ...

  5. Elasticsearch(ES)的高级搜索(DSL搜索)(上篇)

    1. 概述 之前聊了一下 Elasticsearch(ES)的基本使用,今天我们聊聊 Elasticsearch(ES)的高级搜索(DSL搜索),由于DSL搜索内容比较多,因此分为两篇文章完成. 2. ...

  6. learn git(本地仓库)

    #本地 在Windows上安装Git 在Windows上使用Git,可以从Git官网直接https://git-scm.com/downloads下载,然后按默认选项安装即可. 装完成后,在开始菜单里 ...

  7. pypandoc库实现文档转换

    写在前面: 对于python程序员来说,文件格式之间转换很常用,尤其是把我们爬虫爬到的内容转换成想要的文档格式时.这几天看到一个网站上有许多文章,个人很喜欢,直接复制太麻烦,为了将爬到的html文件以 ...

  8. 解决跨域、同源策略-React中代理的配置

    React中代理的配置 主要是解决同源策略的问题 何为同源策略? 因为我们React在3000端口,Vue在8080端口,而后台接口往往在5000,这种不同的端口之间就是一种跨域的问题了 axios发 ...

  9. SpringSecurity系列学习(一):初识SpringSecurity

    SpringSecurity Spring Security是spring采用AOP思想,基于servlet过滤器实现的安全框架.它提供了完善的认证机制和方法级的 授权功能.是一款非常优秀的权限管理框 ...

  10. P5591-小猪佩奇学数学【单位根反演】

    正题 题目链接:https://www.luogu.com.cn/problem/P5591 题目大意 给出\(n,p,k\)求 \[\left(\sum_{i=0}^n\binom{n}{i}p^i ...