c."sourceType", c."sourceId", cu."userId" as "responsibleUserId", c."unanswered"
FROM "contacts" AS c
LEFT JOIN "crmUsers_amocrm_v3" AS cu
ON cu."integrationId" = '00000000-0000-0000-0000-000000000000' AND c."chatType" = cu."chatType" AND c."chatId" = cu."chatId"
WHERE c."accountId" = 91000112 AND c."unanswered" > 0 AND c."deleted" = false
GROUP BY c."chatId", c."sourceType", c."sourceId", cu."userId", c."unanswered"
Я пытаюсь понять как его можно оптимизировать через explain analyse, получаю вот такой план - https://explain.depesz.com/s/hclB.
Если честно не сильно разбираюсь в индексах и как их правильно применять, но планирую добавить вот такой индекс - CREATE INDEX contacts_account_id ON contacts (accountId) WHERE unanswered > 0 AND deleted = false, это ускорит выполнение моего запроса?
А можно вставить план нормально не в JSON, и EXPLAIN (ANALYZE, BUFFERS)? И какая это версия PostgreSQL?
Версия PostgreSQL 11.9, https://explain.depesz.com/s/nLLP
Я написал "не JSON". Дело в том, что Вы либо вставляете как-то криво, либо сайт вообще не читает оценки из плана (а уж читать сам JSON как-то не хочется).
Ну там вроде как тест можно выбрать, вы про это?
Очень часто такое забывают, что foreign key != index, попробуйте создать индекс по полю FK
Я про то, что Вы должны сделать текстовый план и вставить его туда.
Чтобы сделать текстовый план я же долже выбрать формат текст?
Вы должны в psql выполнить "EXPLAIN (ANALYZE, BUFFERS) SELECT ..." и вставить результат на сайт.
Видимо когда используеш функцию из дашборда пгадмина он так криво выдает, вот вручную запрос сделал - https://explain.depesz.com/s/JXzr
Да уж. Может, им bug report написать (такие планы практически бесполезны)? Что там с autovacuum в базе? Для crmUsers_amocrm_v3 давно выполнялся, например (может, она очень часто обновляется)? А так — тут можно попробовать два варианта, в принципе. 1. Тот, что Вы предложили: CREATE INDEX ON contacts (accountId) WHERE unanswered > 0 AND NOT deleted; 2. Или вот так: CREATE INDEX ON crmUsers_amocrm_v3(integrationId, chatType, chatId); -- Порядок полей не так уж важен для *этого* запроса Забыл написать — а что чтений так много? RAM на сервере не хватает? Или настройки "кривые"?
Да, crmUsers_amocrm_v3 часто обновляется, попробую с индексами. Насчет железа должно хватать, но этот вопрос надо уточнить. В любом случае спасибо за ответ. Если получу какие-то результаты, напишу)
> железа должно хватать, но этот вопрос надо уточнить. Но не хватает, как видно по плану. ;)
Обсуждают сегодня