zoukankan      html  css  js  c++  java
  • mongodb系列(二)使用复合索引中要注意字段的前后

    背景

    预先创建了一个复合索引,分别以 updated_at 和 size 两个字段作为索引依据,其中该collection有94万+个document

    db.cms_resources.createIndex({updated_at:-1,size:-1},{name:'index_updated_size_desc'});

    实验

    开始查询并输出状态信息:

    db.cms_resources.find({updated_at:{$lt:1531732138}}).explain(true);

    查询策略使用 IXSCAN 这个没毛病

    但这次查询按照size字段条件

    db.cms_resources.find({size:{$gt:1}}).explain(true);

    查询的策略却为COLLSCAN全表查询:

    从上面看,好像跟查询的字段顺序是有关系的,验证一下,这次把两个条件updated_at和size都查询,但位置跟复合索引字段位置换一下:

    db.cms_resources.find({size:{$lt:1},updated_at:{$gt:1}}).explain(true);

    返回状态信息,还是使用了索引策略

    结论

    1. 建立复合索引,索引中两字段前后顺序与查询条件字段在数量一致的情况下,顺序不影响使用索引查询。

    2.当复合索引中的字段数量与查询条件字段数量不一致情况下,以复合索引字段前置优先规则。

  • 相关阅读:
    Epplus导出excel
    访问GitHub需要修改hosts
    如何将你的.Net Core程序部署成为服务
    生成雪花Id类
    文件操作帮助类
    工作流-WikeFlow
    《C语言进阶剖析》课程目录
    《C++深度解析》课程目录
    USB URB的status及其代表的意义
    数据结构优秀博文整理
  • 原文地址:https://www.cnblogs.com/ExMan/p/13926957.html
Copyright © 2011-2022 走看看