索引创建

1:索引提高查询速度,降低写入速度,权衡常用的查询字段,不必在太多列上建索引

2. 在mongodb中,索引可以按字段升序/降序来创建,便于排序

3. 默认是用btree来组织索引文件,2.4版本以后,也允许建立hash索引.

查看查询计划

db.find(query).explain();

"cursor" : "BasicCursor", ----说明没有索引发挥作用

"nscannedObjects" : 1000 ---理论上要扫描多少行

cursor" : "BtreeCursor sn_1", 用到的btree索引

索引常用命令:

查看当前索引状态: db.collection.getIndexes();

db.articles.getIndexes();

创建普通的单列索引:db.collection.ensureIndex({field:1/-1});  1是升续 2是降续

db.articles.ensureIndex({title:1})

删除单个索引

db.collection.dropIndex({filed:1/-1});

一下删除所有索引

db.collection.dropIndexes();

创建多列索引

db.collection.ensureIndex({field1:1/-1, field2:1/-1});

创建子文档索引

db.collection.ensureIndex({filed.subfield:1/-1});

创建唯一索引:

db.collection.ensureIndex({filed.subfield:1/-1}, {unique:true});

创建稀疏索引:

稀疏索引的特点------如果针对field做索引,针对不含field列的文档,将不建立索引.

与之相对,普通索引,会把该文档的field列的值认为NULL,并建索引.

适宜于: 小部分文档含有某列时.

db.collection.ensureIndex({field:1/-1},{sparse:true});

> db.tea.find();

{ "_id" : ObjectId("5275f99b87437c610023597b"), "email" : "a@163.com" }

{ "_id" : ObjectId("5275f99e87437c610023597c"), "email" : "b@163.com" }

{ "_id" : ObjectId("5275f9e887437c610023597e"), "email" : "c@163.com" }

{ "_id" : ObjectId("5275fa3887437c6100235980") }

如上内容,最后一行没有email列,

如果分别加普通索引,和稀疏索引,

对于最后一行的email分别当成null 和 忽略最后一行来处理.

根据{email:null}来查询,前者能查到,而稀疏索引查不到最后一行.

创建哈希索引(2.4新增的)

哈希索引速度比普通索引快,但是,无法对范围查询进行优化.

适宜于---随机性强的散列

db.collection.ensureIndex({file:’hashed’});

重建索引

一个表经过很多次修改后,导致表的文件产生空洞,索引文件也如此.

可以通过索引的重建,减少索引文件碎片,并提高索引的效率.

类似mysql中的optimize table

db.collection.reIndex()

MongoDB索引创建(5)的更多相关文章

  1. Windows使用MongoDB,以及索引创建

    安装MongoDB https://www.mongodb.com/download-center#community 点击msi安装程序进行安装,可以进行自定义安装,选择安装位置,我选择的是D盘 在 ...

  2. MongoDB索引管理-索引的创建、查看、删除

    索引是提高查询查询效率最有效的手段.索引是一种特殊的数据结构,索引以易于遍历的形式存储了数据的部分内容(如:一个特定的字段或一组字段值),索引会按一定规则对存储值进行排序,而且索引的存储位置在内存中, ...

  3. 三、MongoDB的创建、更新和删除

    一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 概要 下面开始学习MongoDB最重要也是最基础的部分:C(创建)R(查询)U(更新)D( ...

  4. MongoDB索引介绍

    MongoDB中的索引其实类似于关系型数据库,都是为了提高查询和排序的效率的,并且实现原理也基本一致.由于集合中的键(字段)可以是普通数据类型,也可以是子文档.MongoDB可以在各种类型的键上创建索 ...

  5. MongoDB(索引及C#如何操作MongoDB)(转载)

    MongoDB(索引及C如何操作MongoDB) 索引总概况 db.test.ensureIndex({"username":1})//创建索引 db.test.ensureInd ...

  6. MongoDB索引(一)

    原文地址 一.介绍 我们已经很清楚索引会提高查询效率.如果没有索引,MongoDB必须对全部集合进行扫描,即,扫描集合中每条文档以选择那些符合查询条件的文档.对查询来说如果存在合适的索引,则Mongo ...

  7. MongoDB 索引篇

    MongoDB 索引篇 索引的简介 索引可以加快查询的速度,但是过多的索引或者规范不好的索引也会影响到查询的速度.且添加索引之后的对文档的删除,修改会比以前速度慢.因为在进行修改的时候会对索引进行更新 ...

  8. MongoDB索引基本操作

    一.简介 在MongoDB建立索引能提高查询效率,只需要扫描索引只存储的这个集合的一小部分,并只把这小部分加载到内存中,效率大大的提高,如果没有建立索引,在查询时,MongoDB必须执行全表扫描,在数 ...

  9. mongodb怎么创建数据库和配置用户

    mongodb怎么创建数据库和配置用户,远程连接是不够的,还要上去操作和放数据的. 系统:centos 5.x 环境:mongodb 1.安装mongodb 这步就不说了,大家自己去看Centos安装 ...

随机推荐

  1. host 文件

    艾玛,果然一个破的小问题也能纠结好久!不过终于过去了... 1. 机器上的host文件目录一般是  /etc/hosts 主要可能会涉及一些网站的安全访问,把网站加入hosts也就意味着 加入了白名单 ...

  2. Phylab2.0 文档汇总

    实验数据处理脚脚本 编写规范 调用框架以及测试文件规范 脚本调用约定 API文档 用户部分后端请求说明 文章评论区部分后端请求说明 测试报告 测试报告集

  3. nginx 499 状态码优化

    在grafana界面中发现不少499的状态码,在网上了解到出现499的原因大体都是说服务端处理时间过长,客户端主动关闭了连接.   既然原因可能是服务端处理时间太长了,看一下upstream_resp ...

  4. 一个ERP项目实施工程师的若干体会

    本人在多年的工作中,参与了ERP的研发和实施,对ERP有较深的认识.在这里,根据自已的实施过程中的一些经历,把自已在实践中的一些体会贡献出来和大家共享,由于时间和精力所限,内容难免有不当之处,挂一漏万 ...

  5. Mac OSX定位命令路径的方法

    可以使用which命令来定位一个命令. http://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/

  6. 进入OS前的两步之System tick

    OK,继续向操作系统迈进.由简入繁,先实现两个小功能.第一个是system tick,第二个是任务切换(PendSV).一个是操作系统的心跳,一个是操作系统的并发处理的具体实现. System tic ...

  7. Java虚拟机 safepoints 初探

    safepoint的定义很不规范,还跟JVM的具体实现有关,我们的讨论主要针对Hotspot VM. 先看看openjdk的官方解释:  http://openjdk.java.net/groups/ ...

  8. [Machine Learning] 机器学习常见算法分类汇总

    声明:本篇博文根据http://www.ctocio.com/hotnews/15919.html整理,原作者张萌,尊重原创. 机器学习无疑是当前数据分析领域的一个热点内容.很多人在平时的工作中都或多 ...

  9. thinkphp一对多HAS_MANY

    关联关系通常我们所说的关联关系包括下面三种:一对一关联 :ONE_TO_ONE,包括HAS_ONE 和 BELONGS_TO 一对多关联 :ONE_TO_MANY,包括HAS_MANY 和 BELON ...

  10. android:layout_height、android:layout_width、android:height、android:width的关系与区别

    一直一来对android:layout_height.android:layout_width.android:height.android:width这几个属性的关系有些不理解,既然有了androi ...