MongoDB索引Index应用之慢查询分析

  似乎数据库都提供explain功能,利用其进行MongoDB慢查询实践分析前先准备实践数据:

  1、产品表products

      

       

      

    products中添加200多万的数据。

   2、订单表orders

      

       

       

  参考MySQL索引原理之慢查询等优化 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中慢查询优化的过程,MongoDB也是类似的过程:

  1、开启内置的查询分析器,记录读写操作效率

      

      db.setProfilingLevel(n,m),n的取值可选0,1,2

        0:表示不记录

        1:表示记录慢速操作,如果值为1,m必须赋值单位为ms,⽤于定义慢速查询时间的阈值

        2:表示记录所有的读写操作

      

  2、查询监控结果

    db.system.profile.find().sort({millis:-1}).limit(3)

      

  3、分析慢速查询

      

       

    executionStats.executionTimeMillis = 796  //query的整体查询时间。

    executionStats.executionStages.executionTimeMillisEstimate = 568 //该查询检索document获得数据的时间。

    executionStats.executionStages.inputStage.executionTimeMillisEstimate = 226  //该查询扫描⽂档 index所⽤时间。

    这三个值越少越好。

     nReturned=totalKeysExamined= totalDocsExamined=99999,分别代表该条查询返回的条⽬、索引扫描条⽬、⽂档扫描条⽬,三者一致。

    stage组合:Fetch+IXSCAN,根据索引去检索指定document。

    从以上数据看,查询出于理想状态。

    如以上数据不太理想,可以考虑应⽤程序设计不合理、不正确的数据模型、硬件配置问题,缺少索引等。

  4、解读explain结果确定是否缺少索引

      

     看以上查询执行计划,使用了全表烧苗,没有使用索引,可以添加price的索引优化该查询。

 

posted on 2022-03-16 15:18  池塘里洗澡的鸭子  阅读(282)  评论(0编辑  收藏  举报