MongoDB索引类型-基础索引、复合索引、文档索引、惟一索引

与关系型数据库同样,合理的使用索引能够大幅提升MongoDB的查询效率,本文介绍基础索引、复合索引、文档索引等几种经常使用索引的使用。html

 

  1. 基础索引与复合索引
  2. 文档索引
  3. 惟一索引与强制使用索引

1. 基础索引与复合索引

1.1 基础索引

建立索引时,能够是一个集合中的一个或多个字段。数据库

如,为用户表usersage字段,按升序建立索引:函数

db.users.ensureIndex({age:1})

当数据库中有大量数据时,建立索引的操做会很是耗时,咱们能够指定backgroud:true选项:优化

db.users.ensureIndex({age:1}, {backgroud:true})

 

1.2 组合索引

为多个字段联合建立索引就是复合索引。spa

如,为users表的agecity两个字段,分别按升序和降序建立索引:code

db.users.ensureIndex({age:1, city:-1})

建立复合索引后,在使用时应当注意:查询字段要在索引中存在,且顺序一致;若是索引中的首个字段没有出如今查询条件中,则不会用索引。htm

 

2. 文档索引

MongoDB能够为一个或多个字段建立索引,当字段是子文档时,一样能够建立索引。索引

如,users表中有如下数据:ci

{name:"IT笔录", address:{ city:"北京", district:"海淀区" }}

能够为address子文档建立索引以下:文档

db.users.ensureIndex({address:1})

创建索引后,查询时子文档的字段顺序要和查询顺序一致:

// 会使用索引
db.users.find({address:{ city:"北京", district:"海淀区" }})
// 不会使用索引
db.users.find({address:{ district:"海淀区", city:"北京" }})

对子文档建立索引时,也能够只对某一个或几个字段建立索引:

db.users.ensureIndex({"address.city":1})

 

3. 惟一索引与强制使用索引

3.1 惟一索引

在关系型数据库中,咱们能够为字段建立惟一索引,以保证字段值的惟一。在MongoDB中一样可使用惟一索引,MongoDB建立惟一索引,在建立索引时添加unique:true选项便可。

如,为users表的email字段建立惟一索引:

db.users.ensureIndex({email:1}, {unique:true})

建立惟一索引后,当插入重复值时,MongoDB会报错:

> db.users.insert({email:'x@itbilu.com'})
WriteResult({ "nInserted" : 1 })
>
> db.users.insert({email:'x@itbilu.com'})
WriteResult({
  "nInserted" : 0,
  "writeError" : {
    "code" : 11000,
    "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: itbilu.users.$mobile_1  dup key: { : null }"
  }
})

 

3.2 强制使用索引

在MongoDB的查询中,若是查询字段中的一个或几个字段已经建立了索引,咱们可使用hint()函数来强制使用索引。hint()在查询中是很是有效的一种优化手段:

如,咱们要查询users表中的多个字段,查询字段中的age字段建立过索引,可使用hint()来强制傅索引查询:

db.users.find({name:'IT笔录', age:3}).hint({age:1})

下一篇:MongoDB地理空间(2d)索引建立与查询

相关文章
相关标签/搜索