MongoDB入门篇(二)—索引

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w8897282/article/details/80352603

基本操作

查看所有索引

数据库.表名.getIndexes()

创建索引

数据库.表名.ensureIndex({x:1})

数字的正负代表方向,1为正向排序,-1为倒序。如果文档数目较多,那么需要在创建数据库时,就应该完成索引的创建,而不是中途创建索引(系统开销及负重的缘故,否则会验证影响数据库的性能)

为x添加索引之后 ,我们再查询x时,时间就会缩短许多。因此在线上服务时,对于常见的查询,一定要在建库之初,就完成索引的创建工作。虽然多索引会对写入造成一定性能影响,但是相比于高效的查询结果,这些牺牲都是值得的。

种类

当数据量较大时,不使用索引会降低查询效率。mongoDB默认会有一个_id索引,自动生成。

mongo有如下的索引种类:

_id索引

  • 绝大多数集合默认建立的索引
    -对于每个插入的数据,mongoDB都会自动生成一条唯一的_id字段(保存数组对象时,每个对象也都会有一个_id)

单键索引

  • 单键索引是最简单的索引,用于在某个字段上建立,例如一条记录;
{x:1,y:2,z:3}

在x上建立的索引就叫做单键索引。
- 与_id不同,单键索引不会自动创建

索引

多键索引

  • 多键索引与单键索引创建的形式相同,区别在于字段的值

复合索引

过期索引

  • 是指在一段时间后会过期的索引。
  • 在索引过期后,相应的数据会被删除。
  • 适合存储一些在一段时间之后会失效的数据,例如用户的登录信息、存储日志。

    第二个参数为过期的时间,单位为秒。

全文索引

创建

可以看到创建全文索引和创建其他索引的形式类似,不同的是,创建全文索引的key指字段名称,value指固定的字符串。

  • 上图的第一条,我们在article集合的key字段上创建了一个全文索引。
  • 第二条演示了如何创建多个字段创建全文索引。
  • 第三条对集合的所有字段创建全文索引

在每个集合中,只能创建一个全文索引

使用

假设我们创建了如下数据

可以使用如下命令进行全局查询:

  • 第一条查询包含coffee的article
  • 第二条是或查询,包含aa 或 bb 或 cc 的article
  • 第三条是包含aa 或 bb ,但不包含 cc
  • 第四条是且查询,用“”包裹要查询的文本,即可进行且查询,\”是双引号的转义操作

全文索引的相似度查询

例如:

此时查询结果就会包含score字段,即为当前文本与待查文本之间的相似度,得分越高表示越相似。接下来只需要对score字段进行排序,即可得到与待查文本相似度最高的数据。

使用限制

索引属性

在使用ensureIndex创建索引时,第二个参数就是索引的属性值。

属性—name,名称

即索引的名称

属性—unique,唯一性

当设置为true时,不允许在统一集合中查询两条相同的数据


例如:

第一条命令创建了m,n的唯一索引,也就是说该集合中不能存在两个完全一样的m和n,所以第二个操作会报错。

稀疏性

指定索引是否稀疏,默认创建的索引都是非稀疏的(false)。

稀疏性,sparse指定 什么是稀疏:mongodb在处理索引中存在在,文档中不存在的两种方法。 例如: x字段创建了索引,但是插入了一条数据中并没有x字段,默认mongodb会为这个不存在的字段创建索引 如果你不想这件事情发生,就设置sparse:true来避免。 不必为不存在的数据创建索引,如果文档中这个字段很多都没有值,会加快插入速度。 sparse:true是稀疏 false 不是稀疏 。 默认是不稀疏的,自行创建的索引都是不稀疏的。

所谓稀疏,就是当sparse为true且在记录中不存在该索引字段时,不用创建索引,所以节约了磁盘占用;而且插入时由于不用更新索引,所以也加快了插入速度

是否定时删除

也就是之前提及的过期索引

地理位置索引

所谓地理位置索引,就是指可以将一些点的位置存储在MongoDB中,创建索引后,可以按照位置来查找其他的点。

索引分内2类:

  • 2d索引,用于存储和查找平面上的点
  • 2dsphere索引,用于存储和查找球面上的点

查找方式也分为2中:
- 查找距离某个点一定距离的点

  • 查找包含在某个区域内的点

2D索引

平面地理位置索引

创建位置信息:

  • 使用near查询最近的点(100个)

可以使用maxDistance来约束结果集

  • 使用geoWithin查询某个形状内的点

形状的表示方式:

由于2d索引比较复杂,后续内容将另开一篇文章专门讲解。

索引构建情况分析

笔者个人订阅号~欢迎小伙伴们关注
微信公众号-感谢关注

猜你喜欢

转载自blog.csdn.net/w8897282/article/details/80352603