繁体   English   中英

为什么mongoengine ReferenceField不创建索引

[英]Why doesn't mongoengine ReferenceField create an index

我相信MongoEngine中的ReferenceField也会为此字段创建索引。 由于MongoEngine从Django ORM样式中继承了很多东西,并且为它的ForeignKeys创建了一个索引。我希望在这里也能做到这一点。

例如,我有以下两个简单的文档定义:

import mongoengine as me

class Group(me.Document):
    name = me.StringField()
    meta = {'collection': 'groups'}

class Item(me.Document):
    name = me.StringField()
    group = me.ReferenceField(Group)

而且,如果我在mongodb CLI中查找索引,则ReferenceField没有索引:

> db.item.getIndexes()
[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "ns" : "me_tests.item",
        "name" : "_id_"
    }
]
> 

有什么理由不这样做吗?

我的产品服务器有大约60000个项目时遇到问题,它花费了大约234秒的时间对所有项目组进行了查找..但是当我为ReferenceField编制索引时..我将该数字降低到了大约2s ..所以我猜性能的论点很明确。

MongoDB中没有任何联接,因此ReferenceField只是碰巧存储ObjectId的普通字段。

索引应该通过思想和计划来创建-拥有一个索引和没有一个索引都有代价。 那么“什么是模式的最佳索引?” 好吧,这实际上仅取决于一件事- 用法

您如何使用数据以及如何查询数据? 那应该驱动索引的设计,而不是要存储什么类型的数据*

因此,为了获得最佳性能,最好调优您的查询(就像您所做的一样)-使用内置的性能分析是一个好的开始。

*与以往一样,有一个例外证明了规则-地理数据:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM