0
我在Image表中有大約10'000條記錄,我想用查詢檢索它們。簡單查詢的性能問題
的圖像模型定義:
{
"name": "Image",
"plural": "Images",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"name": {
"type": "string",
"required": false
},
"uploaddate": {
"type": "date",
"required": true
},
"location": {
"type": "string"
},
"description": {
"type": "string"
},
"shootingdate": {
"type": "date"
},
"imageStatusTitle": {
"type": "string"
},
"category": {
"type": "string"
},
"canton": {
"type": "string"
},
"rights": {
"type": "boolean"
},
"earmarked": {
"type": "boolean"
}
},
"validations": [],
"relations": {
"imageStatus": {
"type": "embedsOne",
"model": "ImageStatus",
"foreignKey": "",
"options": {
"persistent": false
}
},
"categories": {
"type": "hasMany",
"model": "ImageCategory",
"foreignKey": ""
},
"votes": {
"type": "hasMany",
"model": "WebsiteUser",
"foreignKey": "imageId",
"through": "ImageVote"
},
"original": {
"type": "embedsOne",
"model": "File",
"property": "original",
"options": {
"persistent": false
}
},
"small": {
"type": "embedsOne",
"model": "File",
"property": "small",
"options": {
"persistent": true
}
},
"medium": {
"type": "embedsOne",
"model": "File",
"property": "medium",
"options": {
"persistent": true
}
},
"large": {
"type": "embedsOne",
"model": "File",
"property": "large",
"options": {
"persistent": true
}
},
"xlarge": {
"type": "embedsOne",
"model": "File",
"property": "xlarge",
"options": {
"persistent": true
}
},
"owner": {
"type": "belongsTo",
"model": "WebsiteUser",
"foreignKey": "fotographerId"
},
"widgets": {
"type": "hasMany",
"model": "Widget",
"through": "WidgetImage"
}
}
...
我將做出的查詢如下:
const query = {
fields: ['id', 'name', 'fotographerId'],
include: {
relation: 'owner',
fields: ['id', 'firstname', 'lastname', 'street', 'zip', 'city', 'email', 'phone', 'mobile', 'locale']
}
};
if (0 < whereFilter.length) {
query.where = {
and: whereFilter
};
}
app.models.Image.find(query, function(err, records) {
...
}
的問題是,這個查詢需要5分鐘來執行。 然後我通過刪除默認訂購explained in this issue 4分鐘來改善它。
但是對於10'000文件這樣的查詢,反正4分鐘對我來說似乎很慢。你看到有什麼問題嗎?或者你有一個想法如何加快這個查詢?
嘗試使您搜索的字段作爲索引,這會改善您的搜索 –
Where子句在此處爲空,因此實際上沒有過濾器。或者你的意思是爲我選擇的領域做一個索引? – Simoyw
我建議你做字段索引你正在選擇, 還有一個問題,我的事情你應該改善,有很多的子文件。您可能需要重新訪問您需要的字段,或者您可以參考。 我們製作的子文檔成爲集合,每個文檔都必須搜索其相關的子文檔。 簡單的建議是,不要使用這麼多的子文件。 –