Index 能够提高查询的性能,如果没有Index,MongoDB必须扫描整个collection,从collection的第一个doc开始,直到最后一个doc,即使第一个doc之后的所有doc都不满足查询条件。如果在Collection上有合适的Index,例如,unique index,那么MongoDB在按照index key查找到一个doc之后,就不会继续对其他doc查询,极大地提高查询性能。
MongoDB的 Index 结构跟关系型DB的NonClustered Index相似,都是BTree结构,在每个leaf node中,除了index key之外,还存储相应doc在disk上的地址。在MongoDB中,没有clustered index,因此,Collection初始的物理存储跟doc插入的顺序有关,MongoDB按照doc插入的顺序,依次将doc存储在disk上,插入顺序上相邻的doc在disk的物理位置上也是相邻的;对doc的修改可能对 collection 的物理存储发生变化,如果doc的修改不会导致doc的size增加,那么doc会继续存储在原来的存储空间中,而不会对collection的物理存储有影响,一旦修改操作导致doc的size增加,导致doc发生移动,那么collection的物理存储就会发生变化。
一,doc的移动影响collection的物理存储
如果数据修改增加了doc的size,使其不能继续存放在原来的存储空间中,那么MongoDB必须将其移动到collection的末尾,原先的存储空间被闲置,导致doc的存储密度下降,会严重影响查询性能。doc的移动过程是非常慢的,相当于在一个原子操作中,先做doc的 delete 操作,后做doc的 insert 操作。
doc移动的过程如下图所示:
对doc B进行修改,使其Size增大,原先的位置不能容纳B,MongoDB将B移动在Collection的末尾。原来的存储空间被闲置。

延伸阅读
- ssh框架 2016-09-30
- 阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 2017-07-26
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 论文笔记【图片目标分割】 2017-07-26
- 词向量-LRWE模型-更好地识别反义词同义词 2017-07-26
- 从栈不平衡问题 理解 calling convention 2017-07-26
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明 2017-07-26
- Swift实现JSON转Model - HandyJSON使用讲解 2017-07-26
- 阿里移动安全 Android端恶意锁屏勒索应用分析 2017-07-26
- 集合结合数据结构来看看(二) 2017-07-26
学习是年轻人改变自己的最好方式