我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mongodb 索引相关

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mongodb 索引相关

1.索引的相关介绍:

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

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

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

mongodb 索引相关

 

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

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

 

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

 

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

mongodb 索引相关

 

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

 

 

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

复合唯一索引实例:

mongodb 索引相关

 

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

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

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

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

 mongodb 索引相关


 

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

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

mongodb 索引相关

 

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

 

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

mongodb 索引相关

 

 

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

mongodb 索引相关

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

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

 

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

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

mongodb 索引相关

 

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();

 mongodb 索引相关

 

 

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

 mongodb 索引相关

 

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

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

  Unique:表示唯一索引。

  Sparse:表示稀疏索引.

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

 

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

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

 

mongodb 索引相关

 

 

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

   

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

  

mongodb 索引相关

 

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

 

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

  mongodb 索引相关

 

 

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

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

mongodb 索引相关

 

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

 

  

4.执行计划解读:

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

mongodb 索引相关

 







 

 

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mongodb 索引相关

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2024-04-02

MongoDB索引(7)

索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得 更快。MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧。增加检索的效率. mongodb提供了索引的支持.(越来越倾向于关系型数据库)通常建
MongoDB索引(7)
2021-11-24

MongoDB(八):索引

1. 索引索引支持查询的有效地提高效率。没有索引,MongoDB必须扫描集合的每个文档,以选择与查询语句匹配的文档。这种扫描效率很低,需要MongoDB处理大量的数据。索引是特殊的数据结构,以易于遍历的形式存储数据集的一小部分。 索引存储特定字段或一组字段的值
MongoDB(八):索引
2017-05-14

【mysql】索引相关的个人总结

重点参考:MySQL索引原理及慢查询优化 (美团技术分享网站):原理、示例优化都写的很好。索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!:原理写的很好。【从入门到入土】令人脱发的数据库底层设计:很详细的底层原理一定要仔细看其中讲的索引原理!!
【mysql】索引相关的个人总结
2016-06-26

MongoDB用户相关

2.可以优先创建标红的MongoDB用户3.创建用户命令列表创建用户一定要在具体的db下执行use adminRoot用户:db.createUser({user:"root", pwd:“pwd", roles:[{role:"root", db:"admi
MongoDB用户相关
2014-12-24

MySql 存储引擎和索引相关知识总结

存储引擎什么是数据库存储引擎? 数据库引擎是数据库底层软件组件,不同的存储引擎提供不同的存储机制,索引技巧,锁定水平等功能,使用不同的数据库引擎,可以获得特定的功能 如何查看引擎?--如何查看数据库支持的引擎 show engines;
2022-05-11

编程热搜

目录