千家信息网

mongodb 索引相关

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,1.索引的相关介绍:monggodb的索引也是一颗平衡二叉树,所以在传统数据库中的绝大部分的索引优化技术也是可用的.注意:mongodb可以在任意方向上对数据进行遍历(这点和关系数据库中的索引不一样)
千家信息网最后更新 2026年11月01日mongodb 索引相关

1.索引的相关介绍:

monggodb的索引也是一颗平衡二叉树,所以在传统数据库中的绝大部分的索引优化技术也是可用的.

注意:mongodb可以在任意方向上对数据进行遍历(这点和关系数据库中的索引不一样),但这个仅限于单键排序,对于多键排序索引的方向还是比较重要的.

下面是个单键排序无方向性的具体的例子:


上面是两个查询的执行计划,红色部分的参数表示,查询是否在内存中有排序操作,

从上面的例子中可以很明显的看出,无论是按照iage的降序还是升序排序,查询都没有在内存中有排序操作.

2.mongodb 中的索引类型比较多,我这里仅仅列出比较常见的索引类型,更多的索引类型,参见http://www.cnblogs.com/xinghebuluo/archive/2011/12/19/2293043.html

唯一索引:它保证跟已有文档的索引关键字重复的文档不会被插入

上面的的例子中已成功创建一个唯一索引.

复合唯一索引:多个键值组合的唯一索引。

复合唯一索引实例:

创建唯一索引的注意事项:

(1)唯一索引和不存在的关键字:

当保存到集合中的文档在索引字段没有值的话,它的索引字段会被赋值为null然后插入。就是说,你不可能在唯一索引中插入多个在某个索引字段都没有值的文档。(多个null值被认为是相等的值)

以下实例在唯一索引字段上插入多个null值报错.


(2).对已经存在的重复值的字段创建唯一索引.

如果直接创建唯一索引肯定是会报错的.

(3).如果一定要在这样的字段上创建唯一索引,可以在创建唯一索引的时候指定一个关键字dropDups来强制创建索引.但是这种创建索引的方法会删除集合中的数据,所以不建议使用这种方法。

使用dropDups强制创建索引范例:

稀疏索引:在mongdo的集合中,每个文档的键值对可以不一样(行的列数不一样),那么在一个索引中,字段可能在某个文档中,也有可能不在某个文档中,当字段不在某个文档中的时候,查询利用索引得到数据时默认情况下会将没有这个字段的文档查询出来.

以上实例中的查询,通过索引iage 得到了数据,但是将不包含iage字段的文档也查询出来了,

这个时候可以通过稀疏索引将那些没有包含索引字段的文档过滤掉.

以下是一个通过稀疏索引过滤不包含索引字段的的文档的例子:

从执行计划中可以看到,查询是通过稀疏索引得到数据的,并且查询出来的结果集中全部包含iage字段(过滤掉了没有包含iage的文档).

3.索引管理:

查看制定集合下的索引信息 :db.collection.getIndexes();

查看当前架构下的所有索引信息 :db.system.indexes.find({});

创建索引:db.collection.ensureIndex({key:1}},{unique:true,dropDups:true});

hint({}):强制使用某个键值(索引)

还可以在后台建立索引db.collection.ensureindex({someFiled:1},{background:1})

优点:定期释放锁,以便客服端写入数据.

缺点:耗时较长

前台建立索引(默认):

优点:耗时相对较少

缺点:索引创建期间客服端不能写入数据


删除索引:db.collection.dropIndexes() ,db.collection.dropIndex(index)

重建索引:db.test.reIndex()

标识索引: db.collection.ensureIndex({key:1}},{name:"Index_name"});

(1):查看指定集合的所有索引:db.colleciton.getIndexes();

(2)查看当前架构下的所有索引信息 :db.system.indexes.find({});

(3)创建索引:db.collection.ensureIndex({key:1},{unique:true,dropDups:true,sparse:true})

上面是创建索引的标准语法,第二个大括号({unique:true,dropDups:true,sparse:true})为索引类型参数。

Unique:表示唯一索引。

Sparse:表示稀疏索引.

dropDups:当索引字段中存在重复值时,强制删除重复的文档,该参数会丢失数据,不建议使用该参数.

(4)hint({}):强制使用某个键值(索引)

下面实例中,从执行计划可以看出,强制使用索引了。

(5).删除索引:db.collection.dropIndexes() ,db.collection.dropIndex(index)

db.collection.dropIndexes():删除集合下面的所有索引.

集合test下面已经没有可删除的索引,_id_ 是系统自带的索引,无法手动删除.

db.collection.dropIndex(index_name):删除指定索引

(6).当索引效率低下的时候(可能是碎片较多),就需要重建索引了。db.test.reIndex() 。

db.test.reIndex():重建索引

重建单个索引或是 集合下的所有索引。

4.执行计划解读:

正确解读一个查询的执行计划是优化查询的第一步,所以必须准确的读懂查询的执行计划:







索引 字段 文档 查询 数据 强制 排序 稀疏 例子 参数 多个 实例 时候 类型 信息 关键 关键字 面的 优点 内存 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州紫鲸互联网科技有限公司 中国互联网科技工作委员会毛军 科技互联网产品 互联网科技公司的优势 互联网最新的科技 互联网电商科技 互联网科技公司税收优惠 上海挚品互联网科技 菲比寻常互联网科技 伴你行互联网科技有限公司 互联网科技的未来发展 国外互联网科技网站 互联网科技生活的内容 中国的互联网科技企业的崛起 受益于互联网科技的高速发展 湖南一路畅行互联网科技 本届互联网博览会上的黑科技 怎样加入科技互联网 扫呗互联网科技有限公司 科技互联网专业务虚会材料 科技服务与互联网 中国互联网科技发展 北京互联网络科技有限公司 滨湖区互联网智能科技产品供应 江苏南京365互联网科技 广州优美互联网科技 威龙国际互联网科技公司 华中科技大学互联网的牛人 广州燕处互联网科技有限公司 西安左小互联网科技有限公司
0