索引                                                                                            

  • 基础索引

    用到ensureIndex方法建立索引,1为升序,-1为降序。

    MongoDB数据库在创建集合的时候,默认会为_id创建索引。

    注:当系统已有大量数据时,创建索引就是一个非常耗时的工作,只需要指定backgroud:true即可。

    db.yyd.ensureIndex({"name":1},{"backgroud:true"})
  • 文档索引

    注:下面的查询将不会用到索引,因为查询的顺序与索引建立的顺序不一样。

    db.yyd.find({"address":{"short":"CD","city":"chengdu"}})
  • 组合索引

    此时,无论city和short的顺序是前是后,都会用到索引。

    • 删除索引

    为了后面方便查看,先把刚才建立的索引删除掉。

  • 唯一索引

    这里的唯一索引就像非NoSQL数据库里面的主键一样。如果集合中有重复的值,系统会报错。

    • 强制使用索引

    先向里面插入数据,使name和age为索引,当查询的时候用explain()方法来查看查询所用到的索引indexBounds参数。由上图看出,没用到索引。

    现在通过hint命令强制使用索引。

    • 索引名称

    索引的名称是默认取好了的,一般是“索引_1”这样的,当然也可以自己设置索引的名字。

    db.yyd.ensureIndex({"name":1},{"name":"index_name"})
    • 优化器profiler

    profiler相当于MySQL中的慢查询日志,但是比慢查询日志更详细。

    使用profiler优化器就必须先开启它,在mongoDB中有两种方法控制profiler的开关和级别。

  • 方法一:

    在启动服务的时候加上 –profiler 参数,通过这个参数来设置profiler的级别。

    方法二:

    db.setProfilingLevel(level,slowms)

    在客户端调用setProfilingLevel()方法。

    level为级别,0代表不开启,1代表记录慢命令(默认100ms),3代表记录所有命令。

    slowms代表慢命令执行的时间,超过这个时间将写入日志中。

    查询profiler日志

    db.system.profile.find()
    show profile

    性能优化                                                                                      

    • 创建索引
    • 限定返回结果数
    • 只查询使用到的字段,而不查询所以字段
    • 采用capped集合
    • 采用Server Side Code Execution
    • hint
    • 采用profiling
    • mongosniff底层监控
    mongosniff --source NET lo
    • mongostat查看运行中的实例统计信息
    mongostat
    • db.serverStatus查看实例运行状态
    >db.serverStatus()
    • db.stats查看数据库状态
    >db.stats()

MongoDB学习笔记(三)--权限 && 导出导入备份恢复 && fsync和锁传送门  http://www.cnblogs.com/yydcdut/p/3558446.html

MongoDB学习笔记(五)--复制集 && sharding分片传送门 http://www.cnblogs.com/yydcdut/p/3564470.html

转载请注明出处:http://www.cnblogs.com/yydcdut/p/3563704.html

MongoDB学习笔记(四)--索引 && 性能优化的更多相关文章

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

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

  2. MongoDB学习笔记四:索引

    索引就是用来加速查询的.创建数据库索引就像确定如何组织书的索引一样.但是你的优势是知道今后做何种查询,以及哪些内容需要快速查找.比如:所有的查询都包括"date"键,那么很可能(至 ...

  3. MongoDB学习总结(四) —— 索引的基本用法

    说到索引,大家肯定都在关系型数据库或多或少接触过,它的主要目的是加速查询的速度.MongoDB作为一种数据库,当然也提供了索引的操作. 我们先插入1万条测试数据. 首先,我们先来看看不加索引查找nam ...

  4. Mongodb学习笔记四(Mongodb聚合函数)

    第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...

  5. PHP性能优化学习笔记--语言级性能优化--来自慕课网Pangee http://www.imooc.com/learn/205

    使用ab进行压力测试 ab -n行数 -c并发数 url 重点关注下面两点: 1.Request per secend : 每秒可接收的请求数 2.Time per request : 每次请求所耗费 ...

  6. MongoDB学习笔记-04 索引

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

  7. PHP性能优化学习笔记--PHP周边性能优化--来自慕课网Pangee http://www.imooc.com/learn/205

    PHP一般运行于Linux服务器中,周边主要包括:Linux运行环境.文件存储.数据库.缓存.网络 常见PHP场景的开销次序: 读写内存<<读写数据库(使用内存作为缓存.异步处理)< ...

  8. MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系

    MongoDB的集合(collection)可以看做关系型数据库的表,文档对象(document)可以看做关系型数据库的一条记录.但两者并不完全对等.表的结构是固定的,MongoDB集合并没有这个约束 ...

  9. MongoDB 学习笔记四 C#调用MongoDB

    驱动 下载 https://github.com/mongodb/mongo-csharp-driver/downloads 项目地址: https://github.com/mongodb/mong ...

  10. MongoDB 学习笔记之 索引

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

随机推荐

  1. java中的dao模式

    java中Dao模式   什么是DAO   1.Data Access Object(数据存取对象) 2.位于业务逻辑和持久化数据之间 3.实现对持久化数据的访问 DAO模式的作用 1隔离业务逻辑代码 ...

  2. Xamarin无法调试Android项目

    Xamarin无法调试Android项目   项目可以正常编译,生成APK,也可以通过右键菜单部署.但是一旦开启调试,就报错.错误信息如下: 没有为此解决方案配置选中要生成的项目   出现这种问题是因 ...

  3. django定时任务

    1.celery流程图: Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成 2.使用 ...

  4. luoguP2231 [HNOI2002]跳蚤

    题目链接 bzoj1220: [HNOI2002]跳蚤 题解 根据裴蜀定理,不定方程的解为未知数的gcd,所以选取的n个数的gcd为1 那么n - 1个数保证没有公约数为m的约数,枚举质因数容斥 质因 ...

  5. 新的起点 Entry KINGSOFT

    夜里,陪宝宝睡了会,呃岁月转变,变化里,不经意间加入了kingsoft. 呃,第一天所以算是一个起点或是一个开始.遇到些琐事,Slow network,oa Account login O(∩_∩)O ...

  6. Linux怎么开启ssh

    一.查看ssh开启状态 service ssh status 这是已经开启了的状态 二.如果没有开启  键入以下命令开启 service ssh start 三.开启后如果不能利用xshell远程访问 ...

  7. Python学习笔记(六)—元组的操作

    元祖也是一个列表,它和list的区别是元祖里面的元素无法修改: 如果元祖里面只有一个元素的话,那么你必须在这个元素后边加上逗号,这样才是元祖的类型:否则类型会显示其他类型 元组的定义: 元祖中的方法: ...

  8. oracle_创建表空间、用户、授权等步骤

    --创建表空间(在system用户下才可以创建) //connect system/manager as sysdba:切换到system用户 create tablespace tz datafil ...

  9. oracle监听理解 命名理解

    一.监听器是oracle基于服务器端的一种网络服务,主要作用是监听客户端的连接请求,并将请求转发给服务器. 监听器基于端口的,每个监听器会占用一个端口.默认监听端口1521. oracle家目录下的n ...

  10. [JAVA] JAVA 文档注释

    Java 程序设计环境 文档注释 javadoc JDK中包含的javadoc工具可以由源文件生成一个HTML文档. javadoc从以下几个特性中抽取信息 包 公有类与接口 公有的和受保护的构造器及 ...