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