美文网首页
mongodb索引

mongodb索引

作者: ljt001 | 来源:发表于2022-08-17 22:03 被阅读0次

    mongodb索引

    http://www.runoob.com/mongodb/mongodb-indexing.html

    db.col.createIndex({"title":1})
    db.col.createIndex({"title":1,"description":-1})
    db.col.createIndex({open: 1, close: 1}, {background: true})
    

    查询分析

    MongoDB 查询分析可以确保我们所建立的索引是否有效,是查询语句性能分析的重要工具。

    MongoDB 查询分析常用函数有:explain() 和 hint()。

    explain 操作提供了查询信息,使用索引及查询统计等。有利于我们对索引的优化。

    在 users 集合中创建 gender 和 user_name 的索引,以及使用explain:

    db.users.ensureIndex({gender:1,user_name:1})
    db.users.find({gender:"M"},{user_name:1,_id:0}).explain()
    

    Mongodb 3 查询优化(语句优化、建索引) 一、explain(),语句分析工具

    来自 https://www.cnblogs.com/zhang-ke/p/7804007.html

    对executionStats返回逐层分析
    第一层,executionTimeMillis
    最为直观explain返回值是executionTimeMillis值,指的是我们这条语句的执行时间,这个值当然是希望越少越好。
    其中有3个executionTimeMillis,分别是:
    executionStats.executionTimeMillis
    该query的整体查询时间。
    executionStats.executionStages.executionTimeMillisEstimate
    该查询根据index去检索document获得2001条数据的时间。
    executionStats.executionStages.inputStage.executionTimeMillisEstimate
    该查询扫描2001行index所用时间。
    第二层,index与document扫描数与查询返回条目数
    这个主要讨论3个返回项,nReturned、totalKeysExamined、totalDocsExamined,分别代表该条查询返回的条目、索引扫描条目、文档扫描条目。
    这些都是直观地影响到executionTimeMillis,我们需要扫描的越少速度越快。
    对于一个查询,我们最理想的状态是:
    nReturned=totalKeysExamined=totalDocsExamined
    第三层,stage状态分析
    那么又是什么影响到了totalKeysExamined和totalDocsExamined?是stage的类型。
    类型列举如下:

        COLLSCAN:全表扫描
        IXSCAN:索引扫描
        FETCH:根据索引去检索指定document
        SHARD_MERGE:将各个分片返回数据进行merge
        SORT:表明在内存中进行了排序
        LIMIT:使用limit限制返回数
        SKIP:使用skip进行跳过
        IDHACK:针对_id进行查询
        SHARDING_FILTER:通过mongos对分片数据进行查询
        COUNT:利用db.coll.explain().count()之类进行count运算
        COUNTSCAN:count不使用Index进行count时的stage返回
        COUNT_SCAN:count使用了Index进行count时的stage返回
        SUBPLA:未使用到索引的$or查询的stage返回
        TEXT:使用全文索引进行查询时候的stage返回
        PROJECTION:限定返回字段时候stage的返回
        对于普通查询,我希望看到stage的组合(查询的时候尽可能用上索引):
        Fetch+IDHACK
        Fetch+ixscan
        Limit+(Fetch+ixscan)
        PROJECTION+ixscan
        SHARDING_FITER+ixscan
        COUNT_SCAN
        不希望看到包含如下的stage:
        COLLSCAN(全表扫描),SORT(使用sort但是无index),不合理的SKIP,SUBPLA(未用到index的$or),COUNTSCAN(不使用index进行count)
    

    相关文章

      网友评论

          本文标题:mongodb索引

          本文链接:https://www.haomeiwen.com/subject/gdkxgrtx.html