Проблема производительности при простом запросе

У меня есть около ~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 минут.
Затем я улучшаю его на 4 минуты, удаляя порядок по умолчанию, описанный в этом выпуске .

Но в любом случае 4 минуты для такого запроса на 10 000 документов мне кажется очень медленным. Видите, в чем может быть проблема? Или у вас есть идея, как ускорить этот запрос?

1 ответ

  1. На случай, если у кого-то возникнут такие же проблемы. Причина проблемы производительности была на крюке, который выполняет некоторый код каждый раз, когда модель была извлечена/загружена. Теперь это занимает 2 секунды, чтобы выполнить.