MongoDB学习笔记-04 索引

时间:2023-01-08 10:22:40

索引是用来加速查询的。有了索引之后,数据库不必进行全表扫描,只需先在索引中查找,再根据找到的索引查找数据。MongoDB的索引几乎和传统关系型数据库一样。

创建索引

创建索引是在相应的集合中使用ensureIndex()方法。

>db.user.ensureIndex({"username":1})

要创建查询中用到的所有键的索引。传递给ensureIndex方法的文档形式与传递给sort的一样:1或-1表示索引的方向。若索引只有一个键时,方向则无关紧要。

>db.user.ensureIndex({"username":1, "age":-1})

一般来说,如果包含N个件的索引,则对前几个键的查询都会有帮助,如索引:{"a":1,"b":1,"c":1,…,"z":1}实际上就有了{"a":1}、{"a":1,"b":1}、…等索引。

创建索引的缺点是每次插入、更新和删除时都会产生额外的开销,因为数据库不但需要执行这些操作,还要将这些操作在集合的索引中标记。

建索引时需要考虑的问题

1)会做什么样的查询?哪些键需要索引?

2)每个键的索引方向是怎样的?

3)如何应对扩展?有没有种不同键的排列可以使常用数据更多地保留在内存中?

内嵌文档的键索引和普通键索引并无差异。

索引名称

集合中的每个索引都有一个字符串类型的名字,来唯一标识索引,服务器通过这个名字来删除或者操作索引。默认情况下,索引的名字类似于:keyname1_dir1_keyname2_dir2…

keynameX表示索引的键,dirX表示索引的方向。

可以通过ensureIndex的选项来指定自定义的名字:

>db.user.ensureIndex({"a":1,"b":1,"c":1,…,"z":1},{"name":"indexName"})

唯一索引

唯一索引可以确保集合的每个文档的指定键都有唯一的值。

>db.user.ensureIndex({"username":1},{"unique":true})

集合中的默认唯一所以_id是在集合创建时一同创建,且不能删除。

消除重复

当为已有的集合创建索引,可能有些值已经有重复,此时创建唯一索引便会失败。可以通过dropDups选项来保留发现的第一个文档,而删除接下来的有重复值的文档:

>db.user.ensureIndex({"username":1},{"unique":true, "dropDups":true})

注意:这种做法要慎重,如果数据重要的话,比较稳妥的办法是写个脚本进行预处理。

复合唯一索引

复合唯一索引,单个键的值可以相同,只要所有键的值组合起来不同即可。

>db.user.ensureIndex({"username":1, "age":-1},{"unique":true })

使用explain和hint

explain可以对查询做分析。而hint可以强制使用某个索引:

>db.user.find({"age":14,"username":"wangdh"}).hint({"username":1,"age":1})

管理索引

索引的元数据信息存储在每个数据库的system.indexes集合中,该集合是只读的。只能通过ensureIndex或者dropIndexes进行。

1)修改索引

>db.user.ensureIndex({"username":1},{"background":true})

Background选项可以在后台执行,避免数据库建索引时阻塞请求。

为已有文档创建索引比先创建索引再插入所有文档要稍快一点。

2)删除索引

使用dropIndexes加上索引名可以删除索引。

>db.runCommand({"dropIndexes":"collectionName","index":"indexName"})

删除集合也可以删除索引,删除集合的所有文档并不会影响到索引。

地理空间索引

MongoDB还提供了空间地理索引,并提供了相关的查询

MongoDB学习笔记-04 索引的更多相关文章

  1. mongodb学习笔记之索引(转)

    一.索引基础:    MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧.下面是创建索引的命令:    > db.test.ensureIndex({&quot ...

  2. mongodb 学习笔记 04 -- 游标、索引

    游标 var cursor = db.collectionName.find() 创建游标 cursor.hasNext() 是否有下一个元素 cursor.next() 取出下一个元素 比如 whi ...

  3. MongoDB学习笔记04

    创建索引使用ensureIndex方法,对于同一个集合,同样的索引只需要创建一次,反复创建是徒劳的. 对某个键的索引会加速对该键的查询,然而,对于其它查询可能没有帮助,即便是查询中包含了被索引的键.实 ...

  4. MongoDB 学习笔记之 索引

    索引: db.media.createIndex({"Tracklist": 1}) 1表示升序 -1表示降序 我们要着重看一下对数组创建索引的情况. 构建一个集合:db.medi ...

  5. MongoDB 学习笔记之 索引选项和重建索引

    索引选项: {background:true}在后台创建索引,索引在构建过程中,其他客户端仍然可以查询数据,不会阻塞. db.comments.createIndex({anonymous: 1},{ ...

  6. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  7. MongoDB学习笔记(四)--索引 && 性能优化

    索引                                                                                             基础索引 ...

  8. 【转】mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    mongoDB 学习笔记纯干货(mongoose.增删改查.聚合.索引.连接.备份与恢复.监控等等) http://www.cnblogs.com/bxm0927/p/7159556.html

  9. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

随机推荐

  1. VS插件开发 - 登录身份验证

    [附加] 很多朋友问那个VS背景怎么弄的,我刚刚已经抽时间把制作步骤发出来了: 请参见<VS插件开发 - 个性化VS IDE编辑器,瞬间 高 大 上>. 最近一直在忙着一些事情,一直没有发 ...

  2. tyvj1113 魔族密码

    描述     风之子刚走进他的考场,就……    花花:当当当当~~偶是魅力女皇——花花!!^^(华丽出场,礼炮,鲜花)    风之子:我呕……(杀死人的眼神)快说题目!否则……-_-###    花 ...

  3. Symmetric Difference

    function sym(args) { //return args; var arr = []; for(var i = 0; i < arguments.length; i++){ arr. ...

  4. Given a compiled machine-language program&comma; which statements in the source language cause the execution of the most machine-language instructions and what is the execution time of these instr

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION A  variety  of  studi ...

  5. SDN基础理解

    本文转载自:http://blog.csdn.net/freezgw1985/article/details/16873677 个人觉得对很适合对SDN的入门级的概念性理解,先暂时copy一下,等研究 ...

  6. 432B - Football Kit

    解题思路: 暴力绝对TLE 一个队伍穿主场球衣的次数 = 这个队伍的客场球衣颜色与其他队主场球衣颜色起冲突的次数 + (n - 1) #include <stdio.h> #include ...

  7. windows 如何编译 Openssl ?

    windows 如何编译 Openssl ? 编译环境 VS2015 Openssl 1.0.2 ActivePerl 5.24.3 x64 编译步骤 安装 ActivePerl 期间,勾选添加至环境 ...

  8. vue单页页面开发教程及注意事项

    如下图:   1.安装node.js webpack node -v 查看版本 webpack -v 2.安装脚手架 vue-cli npm install -g vue-cli 3. 在项目文件夹创 ...

  9. (1)STM32使用HAL库操作GPIO

    一  初始化GPIO 使用HAL库的优点在于不用手动添加初始化的代码了,CubeMX会根据软件设置自动生成. 自动生成的HAL库GPIO初始化代码: static void MX_GPIO_Init( ...

  10. 巧用CurrentThread&period;Name来统一标识日志记录(完结篇)

    ▄︻┻┳═一Agenda: ▄︻┻┳═一巧用CurrentThread.Name来统一标识日志记录 ▄︻┻┳═一巧用CurrentThread.Name来统一标识日志记录(续) ▄︻┻┳═一巧用Cur ...