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.当复合索引中的字段数量与查询条件字段数量不一致情况下,以复合索引字段前置优先规则。

  • 相关阅读:
    python3 bs4库
    python3 requests 库学习
    thinkPHP远程代码执行漏洞
    centos 数据库忘记密码
    centos 安装 nfs
    中间人工具---MITMF
    微信公众号授权获取codequ
    vue element 倒计时
    vue常见登陆注册按钮切换效果
    VUE3.0重新定向
  • 原文地址:https://www.cnblogs.com/ExMan/p/13926957.html
Copyright © 2011-2022 走看看