java mongodb 多边形_MongoDB中各种类型的索引

MongoDB 中索引的类型大致包含单键索引、复合索引、多键值索引、地理索引、全文索引、 散列索引等,下面简单介绍各类索引的用法。

1、单字段索引

这个是最简单最常用的索引类型,比如我们上边的例子,为id建立一个单独的索引就是此种类型。

# 为id field建立索引,1表示升序,-1表示降序,没有差别

db.employee.createIndex({‘id‘: 1})

需要注意的是通常MongoDB会自动为我们的文档插入‘_id‘ field,且已经按照升序进行索引,如果我们插入的文档中包含有‘_id‘ field,则MongoDB就不会自动创建‘_id‘ field,但是需要我们自己来保证唯一性从而唯一标识一个文档

2、复合索引

16503f344dd1d96ec380d791d1bfe525.png

上图查询索引的时候会先查询userid,再查询score,然后就可以找到对应的文档。

对于复合索引需要注意以下几点:

索引field的先后顺序很关键,影响有两方面:

1、MongoDB在复合索引中是根据prefix排序查询,就是说排在前面的可以单独使用。

我们创建一个如下的索引

db.collection.createIndex({‘id‘: 1, ‘city‘: 1, ‘score‘: 1})

我们如下的查询可以利用索引

db.collection.find({‘id‘: xxx})

db.collection.find({‘id‘: xxx, ‘city‘: xxx})

db.collection.find({‘id‘: xxx, ‘city‘:xxx, ‘score‘: xxxx})

但是如下的查询无法利用该索引

db.collection.find({‘city‘: xxx})

db.collection.find({‘city‘:xxx, ‘score‘: xxxx})

还有一种特殊的情况,就是如下查询:

db.collection.find({‘id‘: xxx, ‘score‘: xxxx})

这个查询也可以利用索引的前缀‘id‘来查询,但是却不能针对score进行查询,你可以说是部分利用了索引,因此其效率可能不如如下索引:

db.collection.createIndex({‘id‘: 1, ‘score‘: 1})

2.过滤出的document越少的field越应该放在前面,比如此例中id如果是唯一的,那么就应该放在最前面,因为这样通过id就可以锁定唯一一个文档。而如果通过city或者score过滤完成后还是会有大量文档,这就会影响最终的性能。

索引的排序顺序不同

复合索引最末尾的field,其排序顺序不同对于MongoDB的查询排序操作是有影响的。

比如:

db.events.create

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值