zoukankan      html  css  js  c++  java
  • MongoDB学习笔记(四)--索引 && 性能优化

    索引                                                                                            

    • 基础索引

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

      image

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

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

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

      image

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

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

      image

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

      • 删除索引

      image

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

    • 唯一索引

      image

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

      • 强制使用索引

      image

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

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

      image

      • 索引名称

      索引的名称是默认取好了的,一般是“索引_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

  • 相关阅读:
    Oracle11gR2导入导出实战之物化视图prebuilt
    Oracle11gr2_ADG管理之switchover补充
    Oracle11gR2--手工建库&dbca建库
    Oracle11gr2_ADG管理之在备库上模拟failover的过程实战
    自己写个验证码类
    隐藏字符 BOM
    jquery与自己写的js文件冲突解决办法
    javaBean
    序列化
    UML
  • 原文地址:https://www.cnblogs.com/yydcdut/p/3563704.html
Copyright © 2011-2022 走看看