MongoDB——索引操作详解

MongoDB是基于集合建立索引(Index),索引的作用类似与传统关系型数据库,目的是为了提高查询速度。如果没有建立索引,MongoDB在读取数据时必须扫描集合中的所有文档记录。这种全集合扫描效率是非常低的,尤其在处理大数据时,查询可能需要花费几十秒到几分钟的时间。当建立索引后,查询将扫描索引内容,而不会去扫描对应的集合。

但在建立索引的同时,是需要增加额外存储开销的;在已经建立索引的情况下,若新插入了集合文档记录,则会引起索引重排序,这个过程会影响查询速度。MongoDB的索引基于B-tree数据结果及对应算法形成。

默认情况下,在建立集合的同时,MongoDB数据库自动为集合_id建立唯一索引,可以避免重复插入同一_id值的文档记录。

一、 单一字段(键)索引

db.collection_name.createIndex(
	{
   
   <key>:<n>}
)

说明:对一个集合文档的键建立索引,key为键名,n=1为升序,n=-1为降序。

对单一键建立索引

在这里插入图片描述
在这里插入图片描述

嵌套文档单字段索引

在这里插入图片描述

二、 字段值唯一索引

db.collection_name.createIndex(
	{
    
    <key>:<n>, <key>:<n>,...},
	{
    
    unique:true}
)

说明:对一个或多个字段建立唯一索引。key为键名,n=1为升序,n=-1为降序

字段值唯一索引

在这里插入图片描述

  1. name的值必须是唯一的,不能有重复值出现;否则,MongoDB将新插入的重复文档予以拒绝。
  2. 在集合的同一个键上不能重复建立单一索引;若已经建立了索引,再在同一个Key上建立索引,将给予出错提示。

多字段索引

在这里插入图片描述
默认查询结果为(价格升序,颜色降序)
在这里插入图片描述

先用createIndex命令建立price、color多建组合索引,然后用find()查找文档记录;对查找出来的文档记录结果用sort({price:1, color:-1})先用price升序排序,在price价格一样的情况下,再对price相同记录做color降序排序。
在这里插入图片描述

价格降序,颜色升序:

在这里插入图片描述

多字段唯一索引

在这里插入图片描述

注意:只要name和price组合起来的值保持唯一性即可。

三、文本索引

在集合里,为文本内容的文档建立文本索引。

db.collection_name.createIndex(
	{
    
    <key1>:"text", <key2>:"text", ...}
)

基本文本索引

在这里插入图片描述

指定权重文本索引

在这里插入图片描述

通配符文本索引

为指定集合中的所有字符串内容进行搜索提供通配索引,这在高度非结构化的文档里比较有用。

在这里插入图片描述

四、 哈希索引

用于支持对分片键(带哈希键值对的分片集合)的分片数据索引,主要用于分布式数据索引。

db.collection_name.createIndex(
	{
    
    key:"hashed"}
)
//key为含有哈希值的键

建立哈希索引

在这里插入图片描述

  1. hashed索引不支持多字段索引
  2. hashed会把浮点数的小数部分自动去掉,所以对浮点数字段进行索引时,需要注意该特殊情况。如"2.2"、"2.3"都会当做"2"进行索引排序处理
  3. hashed不支持唯一索引

五、 其它方法

  1. db.collection.dropIndex(index):移除集合指定的索引功能。index参数为指定需要删除的集合索引名,可用getIndexes()函数获取集合的所有索引名称
  2. db.collection.dropIndexes():移除一个集合的所有索引功能
  3. db.collection.getIndexes():返回一个指定集合的现有索引描述信息的文档数组
  4. db.collection.reIndex():删除指定集合上所有索引,并重新构建所有现有索引。
  5. db.collection.totalIndexSize():提供指定集合索引大小的报告信息

猜你喜欢

转载自blog.csdn.net/cold___play/article/details/121445015