Mongodb 是基于集合建立索引 (Index),索引的作用类似于传统关系型数据库,目的是为了提高查询速度 。 如果没有建立索引, Mongodb  在读取数据时必须扫描集合中的 所有文档记录。 这种全集合扫描效率是非常低的,尤其在处理大数据时,查询可能需要花费几十秒到几分钟的时间,这对基于互联网应用的网站来说是无法容忍的。 当集合建立索引后,查询将扫描索引内容,而不会去扫描对应的集合。 但在建立索引的同时,是需要增加额外存储开销的;在已经建立索引的情况下,若新 插入了集合文档记录,则会引起索引重排序,这个过程会影响查询速度。 Mongodb 的索 引基于 B-tree 数据结构及对应算法形成。 默认情况下,在建立集合的同时, MongoDB 数据库自动为集合_id 建立唯一索引,可 以避免重复插入同一 _id 值的文档记录。

  创建单一字段索引:  

     db.student.createIndex({age:1})     age为字段名  1 为升序  -1为降序。

  创建字段值唯一索引:

   db.student.createIndex({name:"text"},{unique:true})   单字段值的唯一索引,text为文本索引

    db.student.createIndex({name:"text",age:1},{unique:true})  多字段值的唯一索引

  创建哈希索引:

    db.student.createIndex({_id:"hashed"})

  查询集合上的索引:

     db.student.getIndexes()

  删除集合的所有索引:  

    db.student.dropIndexes()

  删除集合的指定索引:

    db.student.dropIndex(index)

  重建集合的所有索引:

    db.student.reIndex()

  查询集合的索引大小:

    db.student.totalIndexSize()

Mongodb 学习笔记(二) :索引的更多相关文章

  1. MongoDB学习笔记二- Mongoose

    MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...

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

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

  3. MongoDB学习笔记(二)

    MongoDB的其他方法: 显示指定数目的数据: 1.在mongodb中查询指定数目的记录,可以使用: db.collectionname.find().limit(number); 2.在mongo ...

  4. MongoDB学习笔记二—Shell操作

    数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...

  5. MongoDB学习笔记-04 索引

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

  6. MongoDB学习笔记二:创建、更新及删除文档

    插入并保存文档 对目标集使用insert方法插入一个文档: > db.foo.insert({"bar" : "baz"}) 这个操作会给文档增加一个&q ...

  7. MongoDB学习笔记(二) 通过samus驱动实现基本数据操作

    传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由(database).集合(collection).文档对象(documen ...

  8. MongoDB学习笔记二:使用Docker安装MongoDB

    目录 Docker安装MongoDB Docker给MongoDB设置用户密码 NoSQL Manager for MongoDB连接 为admin赋权限 上一个笔记介绍了Windows下安装Mong ...

  9. Mongodb学习笔记二(Mongodb基本命令)

    第二章 基本命令 一.Mongodb命令 说明:Mongodb命令是区分大小写的,使用的命名规则是驼峰命名法. 对于database和collection无需主动创建,在插入数据时,如果databas ...

随机推荐

  1. SDN第六次上机作业

    1.实验拓扑 实验拓扑图如下: 搭建代码如下: 创建py脚本文件,并编写代码,如下: class MyTopo(Topo): def __init__(self): # initilaize topo ...

  2. java使用ssh连接Linux并执行命令

     方式1:通过设置账号密码和链接地址 maven pom.xml配置: <dependency>         <groupId>com.jcraft</groupId ...

  3. SDN实验---Ryu的安装

    一:Ryu是主流SDN开源控制器之一 (一)推文(摘录自) https://ryu.readthedocs.io/en/latest/ https://www.sdnlab.com/1785.html ...

  4. vue的mixin简化开发

    vue的mixin可以将多个组件公用的声明周期方法和数据封装成一个对象,在不同的组件中自由插拔.实际做项目的时候,可以定义一些mixin,供多个组件使用.也非常有必要定义一个全局的mixin对象,对所 ...

  5. Qt编写气体安全管理系统29-跨平台

    一.前言 Qt的跨平台特性是非常厉害的,本来作为C++来说,跨平台的特性比JAVA还要好,只不过学习难度更大,所以大家更理解的跨平台是JAVA,Qt的跨平台特性是我见过的所有开发环境和语言中最厉害的, ...

  6. 有无关键字new的区别

    function Person(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } const ...

  7. matlab学习笔记10_3关系运算符和逻辑运算符

    一起来学matlab-matlab学习笔记10 10_3关系运算符和逻辑运算符 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰 ...

  8. Java 解析XML数据

    实例一:获取指定两个标签之间的数据 XML数据格式: <?xml version="1.0" encoding="utf-8"?> <soap ...

  9. [简短问答]LODOP套打问题及相关

    该博文为简短问答,具体详细介绍可查看本博客的相关博文,套打及位置相关详细博文:LODOP中的各种宽高和位置简短问答.LODOP不同打印机出现偏移问题.Lodop打印控件打印机可打区域的影响 设置纸张边 ...

  10. 【tensorflow基础】Tensorpack-API

    安装 pip install tensorpack 使用 参考 1. Tensorpack: 2. Tensorpack,一个基于TensorFlow的神经网络训练界面,源码包含很多示例: 完