四、MongoDB 索引

本文详细介绍了MongoDB的索引,包括如何创建单键和多键索引,索引的方向、创建索引的考虑因素,以及后台创建索引的方法。还探讨了唯一索引、复合唯一索引的创建,以及如何消除重复值。此外,文章讲解了查询优化器的工作原理,并展示了explain和hint的使用。最后,简述了MongoDB的地理空间索引及其查询方法。
一、索引简介
  MongoDB 的索引几乎与传统的关系型数据库索引一模一样。
1.1、创建索引
————————————————————————
> db.ysq. ensureIndex({ "username": 1})
————————————————————————
  为了便于区分,将上面的索引称为单键索引多键索引如下
————————————————————————
> db.ysq.ensureIndex({ "date": 1, "username": 1})
————————————————————————
* 组值为1或-1的键,表示索引创建的方向。单键索引的方向无关紧要,多键索引的方向则会影响查询;
* MongoDB会安装索引的方向来组织文档;
* 如果索引包含N个键,则对于前几个键的查询都会有帮助;
* MongoDB的查询优化器会重排查询项的顺序,以便利用索引;
* 创建索引的缺点:每次插入、更新、删除时都会产生额外开销;
* 每个集合默认的最大索引个数为64个
 
建立索引时要考虑如下问题:
1、会做什么样的查询?其中哪些键需要索引?
2、每个键的索引方向是怎样的?
3、如何应对扩展?有没有种不同的键的排列可以使常用数据更多地保留在内存中?
 
后台创建索引:
————————————————————————
> db.ysq.ensureIndex({ "comments.date" : 1}, { "backgroup" :true})
————————————————————————
将不阻塞建立索引期间的所有请求。
 
索引内嵌文档中的键:
————————————————————————
> db.ysq.ensureIndex({ "comments.date": 1})
————————————————————————
注意:如果对没有索引的键调用sort,MongoDB需要将所有数据提取到内存来排序。因此,可以做无索引排序是有上限的。一旦集合大到不能再内存中排序,MongoDB就会报错。
 
1.2、 索引名称
默认:keyname1_dir1_keyname2_dir2_..._keynameN_dirN
指定自定义名称:
————————————————————————
db.ysq.ensureIndex({ "a" : 1, "b" : 1, "c" : 1, ... ,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值