MongoDB索引

Posted Rand Tsui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB索引相关的知识,希望对你有一定的参考价值。

首先有个问题必须搞明白:为什么添加索引能加快查找速度。

答案:如果没有索引,那么查找就要遍历所有记录并进行对比,如果有索引,就可以直接根据字段值,找到对应的文档。索引的数据结构跟表的数据结构不一样,索引不是遍历查找,而是映射。

索引类型

_id 自带索引

这是MongoDB自带的,不做多余说明

Single Field  单个字段

这是最常规的索引,字段可以是整数类型,也可以是字符串类型(比如用户名)

注:一个Collection可以多次创建该索引,每次只有一个字段,用于单个字段的查询

db.collection('auths').createIndex( client_id: 1 ,  unique: true );
db.collection('auths').createIndex( username: 1 ,  unique: true );

difference-between-index-on-text-field-and-text-index

Compound Index  复合索引

"key1": 1, "key2": -1

注:一次创建多个字段,用于多个字段的查询

db.collection('auths').createIndex( client_id: 1, username: 1 ,  unique: true );

Multikey Index  多键索引

"key1.key2": 1

Geospatial Index  地理空间索引

为了支持对地理空间坐标数据的高效查询,MongoDB提供了两种特殊的索引:返回结果时使用平面几何的2d索引和使用球面几何返回结果的2dsphere索引。

Text Indexes  文本索引

MongoDB提供了一种文本索引类型,支持在集合中搜索字符串内容。这些文本索引并不存储特定于语言的停止词(例如“the”、“a”、“or”),而是将集合中的词作为词干,只存储根词。

一个字段含有多个单词,搜索其中一个单词就可能搜索到该document。非全文搜索。

注意:一个集合只能创建一个文本索引,但是一个文本索引可以包含多个字段。

Hashed Indexes  散列索引

为了支持基于哈希的分片,MongoDB提供了哈希索引类型,该类型索引字段值的哈希值。这些索引的值沿其范围的分布更加随机,但只支持相等匹配,不支持基于范围的查询。

一些操作:

//查看已有的索引

db.account.getIndexes()

//创建文本索引

db.account.createIndex(username: "text", mobile: "text")

以上是关于MongoDB索引的主要内容,如果未能解决你的问题,请参考以下文章

mongodb 每次都要创建索引吗

mongodb创建索引很慢怎么办

MongoDB的索引操作

MongoDB索引

MongoDB基础

求助mongodb 有索引后查询卡死问题