博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongoDB 索引
阅读量:6446 次
发布时间:2019-06-23

本文共 2382 字,大约阅读时间需要 7 分钟。

 索引操作

什么是索引

建立文档所在位置的查找清单, 使用索引可以快速查找, 减少遍历次数, 提高查找效率

索引约束

即: 什么情况下不适合建立索引?

 

  索引本身也占据空间, 数据量很小的时候就没必要用索引

  索引表会根据数据的修改及时变更, 过于频繁的变更也会对数据增删改的效率造成较低

  因此大量增删改的时候 查询需求量不大 ,不需要创建索引

创建索引

命令

db.collection.createIndex()db.collection.ensureIndex()db.collection.createIndexes()

功能  创建索引

参数  索引域 选取要被创建所用的域, 字典形式

取值   {域名:1/-1}   1 正向索引, -1  逆向索引

索引选项

  通常来加名字, 虽然不设置默认也会自动添加名字 以 域名_1/-1 的形式自动创建

  也可以指定 索引类型 默认是普通索引

  其他类型往下看其他索引部分

ps:

  ensureIndex 和 createIndex 没啥差别,只是名字不一样而已.

  ensureIndex 目前也不被官网更新注明, 后期可能会被抹除

  更推荐 createIndex, 更亲和也更被认可

  createIndexes([{},{}]) 创建多个索引, 没必要, 索引一般都是创建很少就够了

 实例

  为 name 域 创建正向索引

> db.class.createIndex({name:1})            {                "createdCollectionAutomatically" : false,                "numIndexesBefore" : 1,                "numIndexesAfter" : 2,                "ok" : 1            }

  通过第二个参数定义索引名称 为 Age 

  为 age 字段 创建正向索引, 且设置名字为 Age

> db.class.createIndex({age:1},{name:"Age"})            {               "createdCollectionAutomatically" : false,               "numIndexesBefore" : 2,               "numIndexesAfter" : 3,               "ok" : 1            }            >

查看索引

命令

db.class.getIndexes()

功能  查看索引详细

参数  无参数

返回结果  

  当前集合中的所有索引

  默认 _id 域是由系统自动创建的, 且该索引不能被删除

    1 表示正向索引

    -1 表示逆向索引

> db.class.getIndexes()        [            {                "v" : 2,                "key" : {                    "_id" : 1                },                "name" : "_id_",                "ns" : "grade.class"            },            {                "v" : 2,                "key" : {                    "name" : 1                },                "name" : "name_1",                "ns" : "grade.class"            }        ]        >

删除索引

命令

db.collection.dropIndex()

功能  删除一个除了 _id 以外的索引

参数  索引名称 ( 设置的 name ) /  键值对

实例

  > db.class.dropIndex("Age")  { "nIndexesWas" : 3, "ok" : 1 }  > db.class.dropIndex({"name":1})  { "nIndexesWas" : 2, "ok" : 1 }  >

  删除所有除了 _id 以外的索引

  db.collection.dropIndexes()

其他类型索引

复合索引

根据多个域创建一个索引

db.class.createIndex({name:1,age:-1},{name:"name_age"})

子文档 / 数组索引

如果某个域创建索引,  该域的值是子文档 / 数组 ,  则对子文档或者数组的某项查询也是索引查询

ps:

  此索引并不需要你专门做什么操作, 只是一种行为定义

  当你给 book :{xx:"xx"} , book 域创建索引

  则 进行 "book.xx" 的查找的时候则为 子文档索引查找

唯一索引

要求创建索引的域不能有重复值

db.class.createIndex({name:1},{
unique:true})

稀疏索引

如果创建索引时,某些文档不存在指定索引域,则忽略这些文档

db.class.createIndex({age:1},{sparse:true})

 

转载于:https://www.cnblogs.com/shijieli/p/10476517.html

你可能感兴趣的文章
Mozilla 开源稍后阅读应用 Pocket 代码
查看>>
git 基本使用
查看>>
使用docker的mysql镜像
查看>>
学习整套基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构
查看>>
ActiveMQ学习-Network connectors
查看>>
SylixOS高精度时钟分析
查看>>
PHPCMS访问首页想到的问题
查看>>
简要理解锁、同步器之间的关系
查看>>
Webpack自动化构建实践指南
查看>>
建立虚拟wifi热点共享上网
查看>>
学会如何使用移动用户反馈系统,让你玩转APP
查看>>
PHP完全自学手册(文档教程)
查看>>
linux环境通过ssh连接控制台显示中文乱码问题
查看>>
列表增删改查
查看>>
JAVA语言基础-面向对象(代码块)
查看>>
前端加密JS库--CryptoJS 使用指南
查看>>
闪屏页设置
查看>>
12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期时间
查看>>
hibernate多表联合查询接收返回结果集
查看>>
一个程序猿如何自学双截棍,避免各种编程职业病的发生?
查看>>