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

时间:2023-01-01 14:10:56

索引                                                                                            

  • 基础索引

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

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

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

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

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

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

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

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

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

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

    • 删除索引

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

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

  • 唯一索引

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

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

    • 强制使用索引

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

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

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

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

    • 索引名称

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