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

  • 相关阅读:
    14. HTML 列表(无序, 有序, 定义)
    13. HTML table
    12. HTML图像
    11. HTML链接
    10. HTML CSS
    learning java AWT Pannel
    learning AWT Jrame
    learning java 正则表达式
    learning java java.time相关类
    learning java Calendar类
  • 原文地址:https://www.cnblogs.com/ExMan/p/13926957.html
Copyright © 2011-2022 走看看