在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. 铺路、建路、指路:联想ISG给出一份全新的智能化“路书”

    新基建,新服务,新智能:联想给出的"高质量"方案 昨天,第七届联想创新科技大会(Lenovo Tech World 2021)正式召开.每年通过这个大会,各行各业不仅可以了解联想最 ...

  2. python生成时间序列(date_range)

    介绍 自己写了一个用python内置模块实现的生成时间序列的函数 支持自动推断字符串到datetime的转换, 但对格式有一定要求, 其它格式可手动指定格式化方式, 格式化方式与python内置格式化 ...

  3. [Apache Atlas] Atlas 架构设计及源代码简单分析

    Apache Atlas 架构图 Atlas 支持多数据源接入:Hive.HBase.Storm等 Type System Type Atlas 中定义了一些元数据类型 ── AtlasBaseTyp ...

  4. [NOIP2015 普及组] 扫雷游戏

    [NOIP2015 普及组] 扫雷游戏 难度:入门 题目描述 扫雷游戏是一款十分经典的单机小游戏.在nn行mm列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格).玩家翻开 ...

  5. 使用fiddler抓包模拟器及配置fiddler过滤

    一. 安装fiddler https://www.telerik.com/fiddler 二. 配置fiddler,一下的ip要根据自己电脑情况设置 然后重启Fiddler,一定要重启!!! 三.配置 ...

  6. httpd进程数统计,IP封禁,IP连接数量情况查看

    ps -ef|grep httpd|wc -l 统计httpd进程数,连个请求会启动一个进程,使用于Apache服务器. 查看Apache的并发请求数及其TCP连接状态:netstat -n | aw ...

  7. dede新增字段调用方法

    各位在使用{dede:channel }标签的时候,难免会遇到因为现在字段不能满足业务需求,需要新增的情况(具体怎么新增字段自行百度). 但是新增的字段通过DEDE的标签是不能直接使用的,现在博主介绍 ...

  8. Java基础系列(36)- 数组三种初始化及内存分析

    内存分析 数组三种初始化 静态初始化 int[] a = {1,2,3}; Man[] mans = {new Man(1,1),new Man(2,2)} 动态初始化 int[] a = new i ...

  9. linux系统运维操作规范

    1.1安装流程 1.1.1 系统如无特殊要求一律采用小化安装方式进行安装. 1.1.2 安装过程开始之前需要根据实际情况进行CPU数量.磁盘容量.内存分配.文件系统.目录结构.磁盘分区规划.磁盘管理方 ...

  10. HTML 网页开发、CSS 基础语法——七.HTML常用标签

    标题标签(h1-h6) 1.标题标签 ① 标题(Heading),通过<h1>-<h6>六个标签分别来对六个级别的标题进行性定义的. ② <h1>是级别最高,也是字 ...