簡體   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