![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bn19KcQI-1608263574432)(F:\JianShu_material\NoSQL\MongoDB\图片\索引\索引.png)]](https://img-blog.csdnimg.cn/20201218115307311.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMzMDk1NQ==,size_16,color_FFFFFF,t_70)
1. 索引详讲
- Mongodb是基于集合建立索引(Index)
- 索引的作用类似于传统关系型数据库,目的为了提高查询速度
- 如果没有建立索引,Mongodb在读取数据时必须扫描集合中的所有文档记录。这种全集合扫描效率是非常低的,尤其在处理大数据时,查询可能需要花费几十秒到几分钟的时间,这对基于互联网应用的网站来说是无法容忍的。
- 当集合建立索引后,MongoDB将额外存储一份索引数据。
- 简单的说,索引就是将文档按照某个(或某些)字段顺序组织起来,以便能根据该字段高效的查询。
- 查询将扫描索引内容,而不去扫描对应的集合。
- 但在建立索引的同时,是需要增加额外存储开销的;
- 在已经建立的索引的情况下,若新插入了集合文档记录,则会引起索引重排序,这个过程会影响查询速度。
- Mongodb的索引基于B-tree数据结构及对应算法形成。默认情况下,在建立集合的同时,Mongodb数据库自动为集合_ id建立唯一索引,可以避免重复插入同一_ id值的文档记录。
2. 创建索引
单一字段(键)索引:
//key:键名 n=1:升序 n=-1:降序
db.collection_name.createIndex({<key>:<n>})
多字段索引(复合索引):
//不仅能满足多个字段组合起来的查询,还满足所有能匹配复合索引前缀的查询(key1字段即为复合索引前缀)
db.collection_name.createIndex({<key1>:<n>,<key2>:<n>,...})
建立唯一索引:
db.books.ensureIndex({name:-1},{unique:true})
索引使用需要注意的地方:
- 创建索引的时候注意1是正序创建索引,-1是倒序创建索引
- 索引的创建在提高查询性能的同事会影响插入的性能,已建立索引时,若新插入文档记录,会引起索引重排序,这个过程会影响查询速度
- 复合索引要注意索引的先后顺序
- 每个键全建立索引不一定就能提高性能:索引不是万能的
- 在做排序工作的时候如果是超大数据量也可以考虑加上索引用来提高排序的性能
3. 索引管理
查看索引:
//返回指定集合上现有索引描述信息
db.collection_name.getIndexes()
//提供指定集合索引大小的报告信息
db.collection_name.totalIndexSize()
删除索引:
//删除指定集合上的所有索引
db.collection_name.dropIndexes()
//删除指定集合上的指定索引
db.collection_name.dropIndex({<key1>:<n>,<key2>:<n>,...})
//删除指定集合上的所有索引,并重构所有现有索引
db.collection_name.reIndex()
版权声明:本文为weixin_44330955原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。