172 похожих чатов

Всем привет, у меня есть такой относительно дорогой запрос: SELECT c."chatId",

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, это ускорит выполнение моего запроса?

14 ответов

6 просмотров

А можно вставить план нормально не в JSON, и EXPLAIN (ANALYZE, BUFFERS)? И какая это версия PostgreSQL?

А вот это отношение поддержано индексами ? Что-то не увидел этого в плане запроса

Salih-Mamashev Автор вопроса
Salih Mamashev
Версия PostgreSQL 11.9, https://explain.depesz.com...

Я написал "не JSON". Дело в том, что Вы либо вставляете как-то криво, либо сайт вообще не читает оценки из плана (а уж читать сам JSON как-то не хочется).

Salih-Mamashev Автор вопроса
Yaroslav Schekin
Я написал "не JSON". Дело в том, что Вы либо вста...

Ну там вроде как тест можно выбрать, вы про это?

Salih Mamashev
Вроде как нет

Очень часто такое забывают, что foreign key != index, попробуйте создать индекс по полю FK

Salih Mamashev
Ну там вроде как тест можно выбрать, вы про это?

Я про то, что Вы должны сделать текстовый план и вставить его туда.

Salih-Mamashev Автор вопроса
Yaroslav Schekin
Я про то, что Вы должны сделать текстовый план и в...

Чтобы сделать текстовый план я же долже выбрать формат текст?

Salih Mamashev
Чтобы сделать текстовый план я же долже выбрать фо...

Вы должны в psql выполнить "EXPLAIN (ANALYZE, BUFFERS) SELECT ..." и вставить результат на сайт.

Salih-Mamashev Автор вопроса
Yaroslav Schekin
Вы должны в psql выполнить "EXPLAIN (ANALYZE, BUFF...

Видимо когда используеш функцию из дашборда пгадмина он так криво выдает, вот вручную запрос сделал - https://explain.depesz.com/s/JXzr

Salih Mamashev
Видимо когда используеш функцию из дашборда пгадми...

Да уж. Может, им 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 на сервере не хватает? Или настройки "кривые"?

Salih-Mamashev Автор вопроса
Yaroslav Schekin
Да уж. Может, им bug report написать (такие планы ...

Да, crmUsers_amocrm_v3 часто обновляется, попробую с индексами. Насчет железа должно хватать, но этот вопрос надо уточнить. В любом случае спасибо за ответ. Если получу какие-то результаты, напишу)

Salih Mamashev
Да, crmUsers_amocrm_v3 часто обновляется, попробую...

> железа должно хватать, но этот вопрос надо уточнить. Но не хватает, как видно по плану. ;)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта