Sequelize проблема производительности с PostgreSQL - PullRequest
0 голосов
/ 25 марта 2020

У меня очень большая проблема с производительностью при работе с Sequelize.

У меня есть запрос.

SELECT "canstitution".*, "user"."id" AS "user.id", "user"."salutation" AS "user.salutation", 
"user"."firstName" AS "user.firstName", "user"."lastName" AS "user.lastName", "user"."email" AS 
"user.email", "user"."phoneNumber" AS "user.phoneNumber", "user"."profileImage" AS 
"user.profileImage", "user"."profileThumbnailImage" AS "user.profileThumbnailImage", 
"user"."userName" AS "user.userName", "user"."password" AS "user.password", "user"."salt" AS 
"user.salt", "user"."qualificationId" AS "user.qualificationId", "user"."regionId" AS 
"user.regionId", "user"."negativeIds" AS "user.negativeIds", "user"."userRole" AS 
"user.userRole", "user"."accessLevel" AS "user.accessLevel", "user"."transmission" AS 
"user.transmission", "user"."isApproved" AS "user.isApproved", "user"."isArchive" AS 
"user.isArchive", "user"."isActive" AS "user.isActive", "user"."isDeleted" AS "user.isDeleted", 
"user"."isNewUser" AS "user.isNewUser", "user"."createdBy" AS "user.createdBy", 
"user"."updatedBy" AS "user.updatedBy", "user"."createdAt" AS "user.createdAt", 
"user"."updatedAt" AS "user.updatedAt", "user"."deletedAt" AS "user.deletedAt", "user"."gender" 
AS "user.gender", "user"."verifyToken" AS "user.verifyToken", "user"."verifyTokenExpires" AS 
"user.verifyTokenExpires", "user->contacts"."id" AS "user.contacts.id", "user->contacts"."userId" AS "user.contacts.userId", "user->contacts"."gender" AS "user.contacts.gender", "user->contacts"."title" AS "user.contacts.title", "user-
>contacts"."salutation" AS "user.contacts.salutation", "user->contacts"."firstName" AS 
"user.contacts.firstName", "user->contacts"."surName" AS "user.contacts.surName", "user-
>contacts"."contactTypeId" AS "user.contacts.contactTypeId", "user->contacts"."street" AS 
"user.contacts.street", "user->contacts"."city" AS "user.contacts.city", "user->contacts"."zip" 
AS "user.contacts.zip", "user->contacts"."attributes" AS "user.contacts.attributes", "user-
>contacts"."countryId" AS "user.contacts.countryId", "user->contacts"."stateId" AS 
"user.contacts.stateId", "user->contacts"."phoneNumber" AS "user.contacts.phoneNumber", "user-
>contacts"."phoneNumber2" AS "user.contacts.phoneNumber2", "user->contacts"."fax" AS 
"user.contacts.fax", "user->contacts"."mobileNumber" AS "user.contacts.mobileNumber", "user-
>contacts"."email" AS "user.contacts.email", "user->contacts"."remark" AS 
"user.contacts.remark", "user->contacts"."isActive" AS "user.contacts.isActive", "user-
>contacts"."isDeleted" AS "user.contacts.isDeleted", "user->contacts"."createdBy" AS 
"user.contacts.createdBy", "user->contacts"."updatedBy" AS "user.contacts.updatedBy", "user-
>contacts"."createdAt" AS "user.contacts.createdAt", "user->contacts"."deletedAt" AS 
"user.contacts.deletedAt", "user->contacts"."updatedAt" AS "user.contacts.updatedAt", "user-
>careinstitution_requirements"."id" AS "user.careinstitution_requirements.id", "user-
>careinstitution_requirements"."userId" AS "user.careinstitution_requirements.userId", "user-
>careinstitution_requirements"."name" AS "user.careinstitution_requirements.name", "user-
>careinstitution_requirements"."date" AS "user.careinstitution_requirements.date", "user-
>careinstitution_requirements"."startTime" AS "user.careinstitution_requirements.startTime", 
"user->careinstitution_requirements"."endTime" AS "user.careinstitution_requirements.endTime", 
"user->careinstitution_requirements"."divisionId" AS "user.careinstitution_requirements.divisionId", "user->careinstitution_requirements"."qualificationId" AS 
"user.careinstitution_requirements.qualificationId", "user-
>careinstitution_requirements"."address" AS "user.careinstitution_requirements.address", "user-
>careinstitution_requirements"."contactPerson" AS 
"user.careinstitution_requirements.contactPerson", "user-
>careinstitution_requirements"."departmentOfferRemarks" AS 
"user.careinstitution_requirements.departmentOfferRemarks", "user-
>careinstitution_requirements"."departmentBookingRemarks" AS 
"user.careinstitution_requirements.departmentBookingRemarks", "user-
>careinstitution_requirements"."departmentRemarks" AS 
"user.careinstitution_requirements.departmentRemarks", "user-
>careinstitution_requirements"."isWorkingProof" AS 
"user.careinstitution_requirements.isWorkingProof", "user-
>careinstitution_requirements"."offerRemarks" AS 
"user.careinstitution_requirements.offerRemarks", "user-
>careinstitution_requirements"."bookingRemarks" AS 
"user.careinstitution_requirements.bookingRemarks", "user-
>careinstitution_requirements"."appointmentCustomId" AS 
"user.careinstitution_requirements.appointmentCustomId", "user-
>careinstitution_requirements"."color" AS "user.careinstitution_requirements.color", "user-
>careinstitution_requirements"."f" AS "user.careinstitution_requirements.f", "user-
>careinstitution_requirements"."s" AS "user.careinstitution_requirements.s", "user-
>careinstitution_requirements"."n" AS "user.careinstitution_requirements.n", "user-
>careinstitution_requirements"."status" AS "user.careinstitution_requirements.status", "user-
>careinstitution_requirements"."comments" AS "user.careinstitution_requirements.comments", 
"user->careinstitution_requirements"."createdBy" AS 
"user.careinstitution_requirements.createdBy", "user->careinstitution_requirements"."updatedBy" 
AS "user.careinstitution_requirements.updatedBy", "user-
>careinstitution_requirements"."createdAt" AS "user.careinstitution_requirements.createdAt", 
"user->careinstitution_requirements"."updatedAt" AS 
"user.careinstitution_requirements.updatedAt", "user->careinstitution_requirements"."deletedAt" 
AS "user.careinstitution_requirements.deletedAt", "user->careinstitution_requirements-
>division"."id" AS "user.careinstitution_requirements.division.id", "user-
>careinstitution_requirements->division"."userId" AS 
"user.careinstitution_requirements.division.userId", "user->careinstitution_requirements-
>division"."name" AS "user.careinstitution_requirements.division.name", "user-
>careinstitution_requirements->division"."anonymousName" AS 
"user.careinstitution_requirements.division.anonymousName", "user->careinstitution_requirements-
>division"."anonymousName2" AS "user.careinstitution_requirements.division.anonymousName2", 
"user->careinstitution_requirements->division"."address" AS 
"user.careinstitution_requirements.division.address", "user->careinstitution_requirements-
>division"."contactPerson" AS "user.careinstitution_requirements.division.contactPerson", "user-
>careinstitution_requirements->division"."phoneNumber" AS 
"user.careinstitution_requirements.division.phoneNumber", "user->careinstitution_requirements-
>division"."faxNumber" AS "user.careinstitution_requirements.division.faxNumber", "user-
>careinstitution_requirements->division"."email" AS 
"user.careinstitution_requirements.division.email", "user->careinstitution_requirements-
>division"."remarks" AS "user.careinstitution_requirements.division.remarks", "user-
>careinstitution_requirements->division"."commentsOffer" AS 
"user.careinstitution_requirements.division.commentsOffer", "user->careinstitution_requirements-
>division"."commentsVisibleInternally" AS 
"user.careinstitution_requirements.division.commentsVisibleInternally", "user-
>careinstitution_requirements->division"."commentsCareGiver" AS 
"user.careinstitution_requirements.division.commentsCareGiver", "user-
>careinstitution_requirements->division"."locked" AS 
"user.careinstitution_requirements.division.locked", "user->careinstitution_requirements-
>division"."times" AS "user.careinstitution_requirements.division.times", "user-
>careinstitution_requirements->division"."qualifications" AS 
"user.careinstitution_requirements.division.qualifications", "user-
>careinstitution_requirements->division"."attributes" AS 
"user.careinstitution_requirements.division.attributes", "user->careinstitution_requirements-
>division"."createdBy" AS "user.careinstitution_requirements.division.createdBy", "user-
>careinstitution_requirements->division"."updatedBy" AS 
"user.careinstitution_requirements.division.updatedBy", "user->careinstitution_requirements-
>division"."createdAt" AS "user.careinstitution_requirements.division.createdAt", "user-
>careinstitution_requirements->division"."updatedAt" AS 
"user.careinstitution_requirements.division.updatedAt", "user->careinstitution_requirements-
>division"."deletedAt" AS "user.careinstitution_requirements.division.deletedAt", "user-
>careinstitution_requirements->appointments"."id" AS 
"user.careinstitution_requirements.appointments.id", "user->careinstitution_requirements-
>appointments"."avabilityId" AS "user.careinstitution_requirements.appointments.avabilityId", 
"user->careinstitution_requirements->appointments"."requirementId" AS 
"user.careinstitution_requirements.appointments.requirementId", "user-
>careinstitution_requirements->appointments"."status" AS 
"user.careinstitution_requirements.appointments.status", "user->careinstitution_requirements-
>appointments"."createdBy" AS "user.careinstitution_requirements.appointments.createdBy", "user-
>careinstitution_requirements->appointments"."updatedBy" AS 
"user.careinstitution_requirements.appointments.updatedBy", "user->careinstitution_requirements-
>appointments"."unlinkedBy" AS "user.careinstitution_requirements.appointments.unlinkedBy", 
"user->careinstitution_requirements->appointments"."date" AS 
"user.careinstitution_requirements.appointments.date", "user->careinstitution_requirements-
>appointments"."createdAt" AS "user.careinstitution_requirements.appointments.createdAt", "user-
>careinstitution_requirements->appointments"."updatedAt" AS 
"user.careinstitution_requirements.appointments.updatedAt", "user->careinstitution_requirements-
>appointments"."deletedAt" AS "user.careinstitution_requirements.appointments.deletedAt", "user-
>careinstitution_requirements->appointments->ca"."id" AS 
"user.careinstitution_requirements.appointments.ca.id", "user->careinstitution_requirements-
>appointments->ca"."userId" AS "user.careinstitution_requirements.appointments.ca.userId", 
"user->careinstitution_requirements->appointments->ca"."f" AS 
"user.careinstitution_requirements.appointments.ca.f", "user->careinstitution_requirements-
>appointments->ca"."s" AS "user.careinstitution_requirements.appointments.ca.s", "user-
>careinstitution_requirements->appointments->ca"."n" AS 
"user.careinstitution_requirements.appointments.ca.n", "user->careinstitution_requirements-
>appointments->ca"."date" AS "user.careinstitution_requirements.appointments.ca.date", "user-
>careinstitution_requirements->appointments->ca"."name" AS 
"user.careinstitution_requirements.appointments.ca.name", "user->careinstitution_requirements-
>appointments->ca"."createdBy" AS "user.careinstitution_requirements.appointments.ca.createdBy", 
"user->careinstitution_requirements->appointments->ca"."updatedBy" AS 
"user.careinstitution_requirements.appointments.ca.updatedBy", "user-
>careinstitution_requirements->appointments->ca"."createdAt" AS 
"user.careinstitution_requirements.appointments.ca.createdAt", "user-
>careinstitution_requirements->appointments->ca"."updatedAt" AS 
"user.careinstitution_requirements.appointments.ca.updatedAt", "user-
>careinstitution_requirements->appointments->ca"."deletedAt" AS 
"user.careinstitution_requirements.appointments.ca.deletedAt", "user-
>careinstitution_requirements->appointments->ca"."fee" AS 
"user.careinstitution_requirements.appointments.ca.fee", "user->careinstitution_requirements-
>appointments->ca"."nightFee" AS "user.careinstitution_requirements.appointments.ca.nightFee", 
"user->careinstitution_requirements->appointments->ca"."weekendAllowance" AS 
"user.careinstitution_requirements.appointments.ca.weekendAllowance", "user-
>careinstitution_requirements->appointments->ca"."holidayAllowance" AS 
"user.careinstitution_requirements.appointments.ca.holidayAllowance", "user-
>careinstitution_requirements->appointments->ca"."nightAllowance" AS 
"user.careinstitution_requirements.appointments.ca.nightAllowance", "user-
>careinstitution_requirements->appointments->ca"."distanceInKM" AS 
"user.careinstitution_requirements.appointments.ca.distanceInKM", "user-
>careinstitution_requirements->appointments->ca"."feePerKM" AS 
"user.careinstitution_requirements.appointments.ca.feePerKM", "user-
>careinstitution_requirements->appointments->ca"."travelAllowance" AS 
"user.careinstitution_requirements.appointments.ca.travelAllowance", "user-
>careinstitution_requirements->appointments->ca"."otherExpenses" AS 
"user.careinstitution_requirements.appointments.ca.otherExpenses", "user-
>careinstitution_requirements->appointments->ca"."workingHoursFrom" AS 
"user.careinstitution_requirements.appointments.ca.workingHoursFrom", "user-
>careinstitution_requirements->appointments->ca"."workingHoursTo" AS 
"user.careinstitution_requirements.appointments.ca.workingHoursTo", "user-
>careinstitution_requirements->appointments->ca"."breakFrom" AS 
"user.careinstitution_requirements.appointments.ca.breakFrom", "user-
>careinstitution_requirements->appointments->ca"."breakTo" AS 
"user.careinstitution_requirements.appointments.ca.breakTo", "user-
>careinstitution_requirements->appointments->ca"."workingProofRecieved" AS 
"user.careinstitution_requirements.appointments.ca.workingProofRecieved", "user-
>careinstitution_requirements->appointments->ca"."remarksCareGiver" AS 
"user.careinstitution_requirements.appointments.ca.remarksCareGiver", "user-
>careinstitution_requirements->appointments->ca"."remarksInternal" AS 
"user.careinstitution_requirements.appointments.ca.remarksInternal", "user-
>careinstitution_requirements->appointments->ca"."status" AS 
"user.careinstitution_requirements.appointments.ca.status" FROM (SELECT "canstitution"."id", 
"canstitution"."userId", "canstitution"."title", "canstitution"."shortName", 
"canstitution"."companyName", "canstitution"."anonymousName", "canstitution"."anonymousName2", 
"canstitution"."street", "canstitution"."city", "canstitution"."zipCode", 
"canstitution"."countryId", "canstitution"."stateId", "canstitution"."fax", 
"canstitution"."mobileNumber", "canstitution"."defaultQualification", "canstitution"."website", 
"canstitution"."linkedTo", "canstitution"."remarksViewable", 
"canstitution"."careGiverCommission", "canstitution"."doctorCommission", 
"canstitution"."leasingPriceListId", "canstitution"."leasingPriceList", 
"canstitution"."attributes", "canstitution"."invoiceType", "canstitution"."interval", 
"canstitution"."emailInvoice", "canstitution"."addressInvoice", "canstitution"."remarks", 
"canstitution"."requiredDocuments", "canstitution"."isArchive", "canstitution"."createdBy", 
"canstitution"."updatedBy", "canstitution"."createdAt", "canstitution"."updatedAt", 
"canstitution"."deletedAt" FROM "pyc_canstitutions" AS "canstitution" WHERE 
("canstitution"."deletedAt" IS NULL AND (("canstitution"."linkedTo" = '18' OR 
"canstitution"."userId" = '18'))) ORDER BY "canstitution"."companyName" ASC, "canstitution"."id" 
DESC LIMIT 50 OFFSET 0) AS "canstitution" LEFT OUTER JOIN "pyc_users" AS "user" ON 
"canstitution"."userId" = "user"."id" AND ("user"."deletedAt" IS NULL) LEFT OUTER JOIN 
"pyc_contacts" AS "user->contacts" ON "user"."id" = "user->contacts"."userId" AND ("user-
>contacts"."deletedAt" IS NULL) LEFT OUTER JOIN "pyc_careinstitution_requirements" AS "user-
>careinstitution_requirements" ON "user"."id" = "user->careinstitution_requirements"."userId" 
AND ("user->careinstitution_requirements"."deletedAt" IS NULL) LEFT OUTER JOIN "pyc_divisions" 
AS "user->careinstitution_requirements->division" ON "user-
>careinstitution_requirements"."divisionId" = "user->careinstitution_requirements-
>division"."id" AND ("user->careinstitution_requirements->division"."deletedAt" IS NULL) LEFT 
OUTER JOIN "pyc_appointments" AS "user->careinstitution_requirements->appointments" ON "user-
>careinstitution_requirements"."id" = "user->careinstitution_requirements-
>appointments"."requirementId" AND ("user->careinstitution_requirements-
>appointments"."deletedAt" IS NULL) LEFT OUTER JOIN "pyc_caregiver_avabilities" AS "user-
>careinstitution_requirements->appointments->ca" ON "user->careinstitution_requirements-
>appointments"."avabilityId" = "user->careinstitution_requirements->appointments->ca"."id" AND 
("user->careinstitution_requirements->appointments->ca"."deletedAt" IS NULL) ORDER BY 
"canstitution"."companyName" ASC, "canstitution"."id" DESC;

Этот запрос генерируется Sequelize, и он выполняется 5607,534ms при запуске с необработанным запросом Sequelize. Но когда я запускаю тот же запрос в phpPgAadmin, это заняло всего 20,80 мс, что действительно огромная разница.

В основной таблице canstitution содержится около 15000 записей.

Есть ли что-то особенное, что делает phpPgAdmin?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...