【问题标题】:How compound indexes work in mongodb?复合索引如何在 mongodb 中工作?
【发布时间】:2019-01-01 23:15:43
【问题描述】:

我正在使用 pymongo 和 mongoengine,下面是集合架构。

class Person(Document, BaseMixin):
    school_id = StringField(required = True)
    first_name = StringField(default="")
    last_name = StringField(default="")
    email = StringField(default="")
    creation_time = DateTimeField(default = datetime.utcnow())
    user_status = StringField(default='active') # possible values, 'active', 'blocked', 'deleted'
    meta = {
        'indexes': [('school_id', 'first_name'), ('school_id', 'user_status', 'first_name'),
                    ('school_id', 'user_status', 'creation_time'), ('school_id', 'creation_time')],
        'index_background': True
    }

我想获取特定日期范围内的活跃用户和屏蔽用户列表,并按名字搜索活跃用户和屏蔽用户。 我正在浏览有关索引的 mongo 文档,发现该文档说明最好将状态索引归档mongo docs

我创建了上述索引来测试 mongo 在处理查询时选择了哪个索引。该集合包含多所学校的数据,因此在 school_id 上添加了索引。 第一个查询:使用的索引 = school_id_1_user_status_1_first_name_1

Person.objects(school_id = 'test', user_status__in = ['active', 'blocked'], first_name = 'test_name')

第二次查询:使用的索引 = school_id_1_creation_time_1

Person.objects(school_id = 'test', user_status__in = ['active', 'blocked'], creation_time__gte = datetime(2018, 7, 1))

所以我不确定在这种情况下如何使用索引?,任何人都可以提供有关它的更多信息。 另外,如果我的索引方案或集合模式有问题,请建议我。 谢谢。

【问题讨论】:

    标签: python mongodb mongoengine database-indexes mongodb-indexes


    【解决方案1】:

    您实际上拥有您并不真正需要的索引。 您可以将索引减少到:

     'indexes': [('school_id', 'first_name', 'user_status'),('school_id',
     'creation_time','user_status')]
    

    这是因为查询的字段顺序不是必需的,只是该字段存在于查询中。因此,即使索引具有三个字段,查询也只能使用其中两个字段。规则是索引的第一个字段必须在查询中,以便查询可以使用该索引。

    【讨论】:

    • 嗨@jjussi,我添加了这些索引只是为了分析mongo查询使用哪个索引。我不确定复合索引在 mongo 中是如何工作的。根据您的解释,当 ('school_id', 'creation_time','user_status') 和 ('school_id', 'creation_time') 索引都存在时,给定查询应该使用 3 字段索引?但它使用的是 2 个字段索引。所以添加 ('school_id', 'creation_time','user_status') 不会有用吗?所以请解释一下复合索引树是如何构建和搜索的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 2013-10-06
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多