• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
  1. 1. 查看集合当中的索引
  2. 2. mongoDB当中的索引类型
  3. 3. 创建索引
    1. 3.1. 创建过期索引
  4. 4. 删除索引
  5. 5. 补充

3.0、索引

2017-12-16 18:45:33
总字数 875
预计阅读时间 3 分钟

索引是对数据库表中一列或多列的值进行排序的一种结构,进行排序以后 , 数据的检索效率就会极大提高 , 因为不需要遍历所有的数据 , 所以使用索引可快速访问数据库表中的特定信息。

查看集合当中的索引

1
db.集合名称.getIndexes()

每个集合当中都包含一个默认创建的索引 , 就是主键id的索引 , 名称是 _id_
getIndexes

mongoDB当中的索引类型

  • _id索引 : 在集合被创建的时候自动添加的索引 , 不能删除 ( 也是一种单键索引 )
  • 单键索引 : 针对单个字段创建的索引
  • 多键索引 : 在数组元素上建立的索引 , 会对数组的每个元素添加索引
  • 复合索引 : 针对多个字段创建的索引
  • 过期索引 : 在一定时间后会过期的索引 , 索引过期后 , 相应的数据会被删除
    适合存储一些登陆信息 日志等数据
  • 全文索引
  • 地理位置索引

创建索引

1
db.集合名称.ensureIndex( {索引字段名1: 1 , 索引字段名2 : 1 ...} , [索引属性] )

索引类型1表示按照升序方式存储索引 , -1表示降序
有多个索引字段时 , 该索引就是一个复合索引
索引属性的可选参数 , 后面有具体的介绍

创建过期索引
1
db.集合名称.ensureIndex( {索引字段名 :1 ...} , {expireAfterSeconds : 过期的秒数} )

注意 :

  1. 过期索引对应的字段必须是Date类型 或者 Date的数组 , 否则不会被自动删除

-> 可以使用 .insert( {time : new Date()} ) 来获取当前的日期时间
2. 如果是Date的数组 , 只要有其中任意一个到了过期时间 , 该数据就会被删除
3. 过期索引不可以是复合索引
4. 删除的执行是由后台的一个60s执行一次的定时任务完成 , 所以删除的时间是不精确的

删除索引

1
db.集合名称.dropIndex("索引名称")

注意是索引名称 , 而不是索引所对应的字段


补充

在执行查询时强制使用索引

1
db.集合名称.find( 查询条件 ).hint( 索引名称 )

索引当中的其他几个重要的属性

  • name - 索引的名称 , 不指定的话可以由系统自动生成
  • unique - (true/false) 索引的唯一性 , 相当于为添加该索引的某个或多个字段添加了唯一约束 , 不能插入重复的两条数据 (默认false)
  • sparse - (true/false) 稀疏性 默认false , 为某个字段添加索引之后 , 由于非关系型数据库的特点 , 某条数据可能并不包含该字段的键值对数据 , 如果在非稀疏的模式下 , 也会为该数据创建索引 , 如果不希望如此 , 可以把sparse置为true . 有助于减少磁盘占用 , 提高写入性能

注意 : 鉴于稀疏索引本身的这种特性 , 如果我们强制使用稀疏索引去查找不存在某个字段的数据 , 就会出现问题 , 因为这些数据不存在于稀疏索引当中
例如 “m_1”是一个针对m字段的稀疏索引
执行 db.test.find({m : {$exists:false }}).hint(“m_1”)
即使有符合条件的数据 , 也不可能返回任何结果

  • 数据库
  • MongoDB
  • MongoDB

扫一扫,分享到微信

3.1、全文索引
2.1、数据查询 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆