[英]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.